我正在我的计算器上制作一个质数分解程序。它适用于较小的数字,但它在 2^n、n≥47 中显示出奇怪的行为。它会在一段时间内正常工作,但是在某个时候程序崩溃了,在吐出质数17和353之后,永远运行。
由于我在编程方面的知识极其有限,我怀疑计算器无法准确处理如此大的数字并弄乱程序。
下面是代码:(变量解释如下;对于 A^B 的素因数,以 A Bi 的形式输出素因数)
ClrHome
Disp "N=Number
Input "N: ",N
If N≥2 and not(fPart(N)):Then
0→dim(ʟP)
2→I
0→R
0→S
Repeat N=1
If not(fPart(N/I)):Then
While not(fPart(N/I))
N/I→N
S+1→S
End
R+1→R
I+Si→ʟP(R)
0→S
End
I+1→I
End
End
ʟP
#N:要素数分解的数字(输入)
#I:质因数
#R:唯一素因数的数量
#S:素因数的指数
#ʟP:N的素数分解(输出)
要重现此问题,请运行程序并为 n≥47 输入任意 2^n。
有人知道为什么会这样吗?
你的假设是正确的。TI-Basic 中的实数数据类型最多只能存储 44 位数据(源)。这可以通过以下方式使用 solve( 命令来证明:
solve((X+1)-X,X,0
无论是作为程序运行,作为子程序调用,还是从主屏幕执行,该程序/函数都将输出与失败点类似的大量数字(这永远不会发生,因为X 1
永远不会等于X
)。
另外,我缩短了你的代码:
ClrHome
Prompt N
If N≥2 and not(fPart(N:Then
0→dim(ʟP
DelVar RDelVar S2→I
Repeat N=1
If not(fPart(N/I:Then
While not(fPart(N/I
N/I→N
S+1→S
End
R+1→R
I+Si→ʟP(R
0→S
End
I+1→I
End
End
ʟP