我需要知道数字的分解。为什么?好吧,我打算写一个名为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(每种模式都有不同的变量)。
答案 0 :(得分:5)
让我们来看看你的代码:
:Input "TYPE NUMBER", X
:FOR(A,1,X)
:IF remainder(X,A)=0
:Disp A
:End
:End
:End
首先,程序会自动返回TI-Basic。默认情况下,程序结束时无需Stop
,Return
或End
。程序行为(有一个例外)就像它们最后有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
可能的优化(由您决定):
))
以节省一点空间(2个字节),但由于{{1}的怪癖,大数字的速度明显下降} loops。答案 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