用Python进行Lucas-Lehmer原始性测试

时间:2018-07-06 11:38:05

标签: python primality-test

我写了下面的代码,以使Lucas-Lehmer级数达到p,使Mersenne数的指数为p。检查后,我发现它不适用于某些质数p,例如11、23、29等。任何帮助将非常有价值!

代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <link rel="stylesheet" href="formValidation.css" type="text/css">
    <title>Form</title>
</head>
<body>
   
   <div id="wrapper">
     
         <div class="form-element">

          <label class="label13" for="email">Email</label>
          <input type="text" name="email" id="email" placeholder="e.g. yourname@gmail.com">
        </div>

       <div class="form-element">
          <label class="label24" for="phone">Telephone</label>
          <input type="text" name="phone" id="phone" placeholder="e.g. 778-333-3215">
        </div>

       <div class="form-element">
          <label class="label13" for="password">Password</label>
          <input type="password" name="password" id="password">
        </div>

       <div class="form-element">
          <label class="label24" for="passwordConfirm">Confirm Password</label>
          <input type="password" name="passwordConfirm" id="passwordConfirm">
        </div> 
   </div>
   
   <script type="text/javascript">
    
    
       
    </script>
    
</body>
</html>

2 个答案:

答案 0 :(得分:1)

尝试一下:

lucas_lehmer = [4]

def mersenne(n):
    return (2 ** n) - 1

def ll(n):
    global lucas_lehmer
    if len(lucas_lehmer) < n:
        for num in range(n-1):
            lucas_lehmer.append(lucas_lehmer[-1] ** 2 - 2)
    return lucas_lehmer[n-1]

def check_prime(n):
    m = mersenne(n)
    if ll(n - 1) % m == 0:
        return m
    else:
        return -1

注意事项:

  • 您需要调用check_prime函数
  • check_prime函数的输入必须是较小的素数
  • 并非所有素数都会在Mersenne序列中产生素数结果。
  • 如果2^n - 1不是素数,它将返回-1

我还清除了一些代码,使其更易于阅读。

答案 1 :(得分:0)

Lucas-Lehmer测试测试Mersenne数是否为质数。 11不是梅森编号,因此测试失败。 商品编号为-M_n = 2^n-1

http://mathworld.wolfram.com/MersenneNumber.html

p.s如果只计算一次M=(2^p-1),则实现效率更高