【问题标题】:Lucas-Lehmer test using Python not working for large numbers使用 Python 的 Lucas-Lehmer 测试不适用于大量数据
【发布时间】:2020-04-22 06:39:42
【问题描述】:

我正在尝试编写一个函数,该函数应该接受梅森数并使用 Lucas-Lehmer 素数测试返回它是否是素数。我正在尝试返回 Lucas-Lehmer 序列中生成的最后一个数字,如果它是质数,则应该为 0

我已经编写了以下函数来完成上述操作

def lucas_lehmer_modified(p):
   M=2**p-1
   for i in range (0,p-1):
     if i == 0:
       x = 4
     else : 
        x = (prev**2-2)%(M)
     prev=x
   return x

我的问题是此代码适用于127 等小数,但不适用于2305843009213693951 等大数,甚至适用于524287。我的 Python Jupyter 笔记本挂断了。关于如何获得一个函数的任何建议,该函数将梅森素数作为输入并使用 Lucas Lehmer 测试返回它是否是素数。我需要让它工作至少2^65-1

【问题讨论】:

  • 您在哪里运行 Jupyter 笔记本?在本地还是在 Google/Internet 上?
  • 无关,但根据wikipedia,LLT 适用于2**p - 1 形式的梅森数其中 p 是奇素数。 65 是奇数但不是素数 (5*13)。
  • 您实际上将什么传递给lucas_lehmer_modified()?你是通过61还是通过2305843009213693951
  • 如果我通过19524287 的 p,它也适用于 612305843009213693951 的 p),它对我来说效果很好。我的感觉是您将 M 传递给函数而不是 p。
  • 对于 p=19937,函数已经需要 18 秒才能运行。任何比这更高的数字都可能导致挂起,所以这对我来说是另一个指标,你传递的是 M 而不是 p。

标签: python largenumber primality-test


【解决方案1】:

我从维基百科条目的伪代码中编写了 Lucas Lehmer 测试,这是我想出的(p 是 mersenne 幂数):

def LucasLehmer(p):
   if p == 2:
     return True
   s = 4
   M = pow(2, p) - 1
   for x in range (1, (p-2)+1):
      s = ((s * s) - 2) % M
   if s == 0: return True
   else: return False

还有一些答案:

In [388]: LucasLehmer(9689)                                                                                                                                                                     
Out[388]: True

In [389]: LucasLehmer(19937)                                                                                                                                                                    
Out[389]: True

In [390]: LucasLehmer(500)                                                                                                                                                                      
Out[390]: False



【讨论】:

    猜你喜欢
    • 2018-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-05
    • 1970-01-01
    • 2017-01-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多