python - 打印满足以下等式的素数
问题描述
我想找到满足以下等式的素数。方程是: pn = 2^k +1 , k <= 32
我无法得到任何输出。我在哪里做错了?你能在代码上显示它吗?
def is_prime(x):
for k in range(1, 32 + 1):
if k > 1:
for i in range (2 , k):
if (k % i) == 0:
break
else:
p = 2**k+1
if is_prime (p):
print (p)
解决方案
好的,我想说的是:
与其迭代从 1 到 2^32 的每一个数字,不如只迭代你感兴趣的数字的 32 个指数,并检查它们是否是素数。
例如
from math import sqrt
def is_prime(x):
for i in range(2, int(sqrt(x))+1):
if x%i == 0:
return False
return True
for k in range(1, 33):
p = 2**k+1
if is_prime(p):
print(f'{k:2}: {p}')
# 1: 3
# 2: 5
# 4: 17
# 8: 257
# 16: 65537