提问者:小点点

质因数分解程序 (TI-84 )


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

有人知道为什么会这样吗?


共1个答案

匿名用户

你的假设是正确的。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