计算器上的除数函数

时间:2016-10-16 16:49:44

标签: calculator ti-basic

我需要知道数字的分解。为什么?好吧,我打算写一个名为Math World的故事,对于基础人群,我有这些性别和因素规则:

如果男性因素超过女性因素(如4个男性因素和3个女性因素),则该数字为男性。

如果女性因素超过男性因素,则该数字为女性。

如果男性因素与女性因素相同,则该数字是雌雄同体(男性和女性)。

如果你将一个男性数字取整数幂,你就得到一个雌雄同体的数字。

如果你将一个女性号码换成整数,你会得到另一个女性号码。

男性和女性之间交替进行(因此2个是男性,3个是女性等等)

但这只适用于基础人群。

无论如何,我的计算器上没有分解程序。我需要所有因素,而不仅仅是主要因素。我怎么能这样做?

计算器型号:

TI-84 Plus Silver Edition

代码:

:Input "TYPE NUMBER", X
:FOR(A,1,X)
:IF remainder(X,A)=0
:Disp A
:End
:End
:End

这是给我计算器错误的代码。我的计算器处于FUNC模式,因此我通过变量按钮放入了X(每种模式都有不同的变量)。

3 个答案:

答案 0 :(得分:5)

让我们来看看你的代码:

:Input "TYPE NUMBER", X
:FOR(A,1,X)
:IF remainder(X,A)=0
:Disp A
:End
:End
:End

首先,程序会自动返回TI-Basic。默认情况下,程序结束时无需StopReturnEnd。程序行为(有一个例外)就像它们最后有Return一样(例外情况是如果在最后一行评估某些内容,将显示它而不是Done)。

其次,除非If语句附带Then,否则End不是必需的(它只是有条件评估的下一行)。

因此,您应该只有一个End代币而不是三个。此外,这可能是您的错字,但之后不应该有空格第一行中的逗号。您可能在第一行的结束引用之前想要它。

现在您的代码正常运行,它看起来像这样:

:Input "TYPE NUMBER ",X
:For(A,1,X)
:If remainder(X,A)=0
:Disp A
:End

然而,仍有优化措施。由于For循环中的怪癖,您应该留下右括号。但对于if语句,您可以If 0=remainder(X,A取消右括号。此外,您只需使用0=,而不是not(。最后,remainder(X,A不适用于所有TI系列,并且比fPart(X/A长一个字节。这种替换没有任何缺点,它将为您节省一点空间(1个字节),时间和兼容性。

最后,如果X是数字而A是该数字的因子,则X / A也是一个因子。因此,我们只需要循环到sqrt(X),这样效率更高。这是最终的代码:

:Input "TYPE NUMBER ",X
:For(A,1,√(X))
:If not(fpart(X/A
:Disp A,X/A
:End

可能的优化(由您决定):

  • 50/50 - 分别计算X / A并使用Ans两次。速度稍微节省,没有尺寸变化,可读性稍差。
  • 不建议 - 在For循环中保留))以节省一点空间(2个字节),但由于{{1}的怪癖,大数字的速度明显下降} loops。
  • 由您决定 - 因为您已经知道1和X是因子,您可以从2开始循环。这只取决于您记录或显示这些值的方式。

答案 1 :(得分:0)

Input "TYPE NUMBER:",N
For(A,1,N)
If remainder(N,A)=0
Disp A
End

我无法测试他的程序,但我很确定它有效。该程序清楚地显示了这些因素,但可以很容易地将其更改为可以输出的格式,例如列表。

如果N除以A的余数等于零,则A是因子N.

答案 2 :(得分:0)

如果您不关心因素的顺序,可以使用此方法将算法的速度从O(n)提高到O(√n)。

For(A,1,√(X))
If remainder(X,A)=0
Disp A,X/A
End