【问题标题】:Value 4 when computing primes using Fermat's Little Theorem使用费马小定理计算素数时的值 4
【发布时间】:2016-12-25 06:54:45
【问题描述】:

我写了一个现在不重要的程序,但它是基于这个费马定理的。现在的问题是输出不如预期。我知道这个问题不太好或不合时宜,但我无法解决错误,即输出中出现了 4 ,而不能出现在此处。我无法调试它。

定理:

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

输出是这样的:

【问题讨论】:

  • 输出不如预期,预期输出是什么?此外。请不要将图像作为代码发布,See this meta post。另请参阅 How to Ask 以及什么是 minimal reproducible example
  • @bhargav-rao 输出不包括 4(见附图),但由于定理没有错,所以一定有错误
  • edit您的帖子并在那里添加您的错误描述。
  • @Bhargav Rao 已添加
  • 还要注意,通过测试的p 不一定是素数;所有定理都表明没有通过测试的p 不是素数。

标签: python python-2.7 math


【解决方案1】:

在这里可以找到完美的解释:https://stackoverflow.com/a/29596459/5110035

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

费马小定理可以很容易地用 Python 写成这样:

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

我认为出现四的唯一原因是因为您的算法有点不正确。埃拉托色尼筛法,一旦它找到一个非素数,它就会摆脱它的倍数,例如 4 是 2 的倍数,但 2 是素数,而 4 不是。它检查的数字更少,速度更快。调查一下。

【讨论】:

  • CheckIfProbablyPrime 中更好地测试多个小素数,例如随机选择四个素数 2、5、11、23,这应该可以捕捉到大多数中等大小的误报。仅当 x>p 时才使用素数 p 执行测试。
猜你喜欢
  • 1970-01-01
  • 2013-10-16
  • 1970-01-01
  • 2015-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-10
  • 2012-08-29
相关资源
最近更新 更多