我写了下面的代码,以使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>
答案 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
函数的输入必须是较小的素数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)
,则实现效率更高