首页 > 解决方案 > 当我输入一个巨大的数字时,为什么 python 在我的素数测试中跳过我的 while 循环?

问题描述

我目前正在尝试使用 python 进行简单的素数测试来测试素数。

这是我为测试制作的代码:

def is_prime(n):      
    if np.mod(n, 2) == 0:          
        return False

    f = 3

    while np.square(f) <= n:       
        if np.mod(n, f) == 0:
            return False
        f += 2

    return True             

我运行代码,它适用于小数字。然后我输入一个巨大的数字(为方便起见,我选择了2^128),它返回 True。但是当我输入 2^129, 2^130, 2^131, 2^132(等等)时,它总是返回 True。我相信我的循环已被跳过。为了验证这一点,我修改了如下代码:

while np.square(f) <= n:       
    if np.mod(n, f) == 0:
        print(f)    #Added line
        return False
    f += 2

print(f)     #Added line

我再次测试了一些小数字,它会打印出正确的 f 值。但是对于任意大的数字(可能高于 '2^50'),它只会打印 3(f 的初始值)。所以我确信这个while循环已经被跳过了。

有没有办法来解决这个问题?

附言:

编辑1:

标签: pythonloopswhile-loopprimality-test

解决方案


推荐阅读