4

我正在我的计算器上制作一个素数分解程序。它适用于较小的数字,但对于 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)

要重现此问题,请运行程序并输入任何 2^n (对于 n≥47)。

有谁知道为什么会这样?

4

1 回答 1

3

你的假设是正确的。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
于 2014-12-29T19:19:00.013 回答