素数分解程序(TI-84 +)

时间:2014-11-29 18:26:25

标签: prime-factoring ti-basic

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

任何人都知道为什么会这样吗?

1 个答案:

答案 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