我正在计算器上制作一个素数分解程序。它适用于较小的数字,但它显示2 ^ n,n≥47的奇怪行为。一段时间它会好起来,但是在某些时候程序崩溃并且在吐出素数17和353之后,它会一直运行。
由于我对编程的知识非常有限,我怀疑计算器无法准确处理如此大的数字,并且弄乱了程序。
这是代码:(下面解释的变量;输出A + Bi形式的素数因子,A ^ B的素因子)
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: Number to be prime-factored (input)
#I: A prime factor
#R: Number of unique prime factors
#S: Exponent on prime factor
#ʟP: Prime factorization of N (output)
要重现此问题,请运行程序并输入n≥47的任何2 ^ n。
任何人都知道为什么会这样吗?
答案 0 :(得分:2)
您的假设是正确的。 TI-Basic中的实数数据类型最多只能存储44位数据(source)。这可以通过以下方式使用the solve( command来证明:
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