使用费马小定理计算素数时的值4

时间:2016-12-25 06:54:45

标签: python python-2.7 math

我写了一个现在不重要的程序,但这是在费马定理中。现在问题是输出不如预期。我知道这个问题不是太好或者没有标记,但是我无法解决这个错误,即输出中出现了4个必须不存在的错误。我无法调试它。

定理: This Image

for x in range(1,100):
 m=5**(x-1)
 if m%x>1:    
   pass
 else:
   print"prime",x

输出是这样的:

This is output

1 个答案:

答案 0 :(得分:1)

这里有一个完美的解释:https://stackoverflow.com/a/29596459/5110035

基本上这种方法不是很准确。 我在你的代码中找到了一个模式。如果选择a 5,则会打印a-1非素数。这就是4出现的原因。将它更改为7,然后你得到6.但也会出现其他错误,例如25。

Fermat的小定理可以很容易地用Python编写:

def CheckIfProbablyPrime(x): return pow(2, x-1, x) == 1

我认为四个出现的唯一原因是因为你的算法有点不正确。 Eratosthenes的筛子,一旦它找到非素数,它就会摆脱它的倍数,例如4是2的倍数,但2是素数,因为4不是。它检查的数字越少,速度越快。看看那个。