500年前,人们相信所有形式为q = 2 ^ p的数字q-如果p为质数,则1为质数。
写一个不带参数的函数rong_prime。它应该返回q = 2 ^ p-1的第一个素数p不是素数。
提示:此数字应在10到15之间。
我想出的代码如下,但不起作用
def isprime(n):
if n < 2:
return False
elif n == 2:
return True
else:
if n % 2 == 0:
return False
for i in range(3,n,2):
if n % i == 0:
return False
return True
def wrong_prime():
for i in range(1,):
q = 2**i-1
if isprime(i) and isprime(q) == False:
print(q)
输入错误函数时没有输出
任何人都可以帮助产生工作功能吗?
range(1,)
是range(0, 1)
,即您仅测试0
。如果您想要开放式范围,可以使用例如具有额外计数变量的while
循环。另请注意,您应该打印p
,而不是q
def wrong_prime():
i = 1
while True: # fix loop
q = 2**i-1
if isprime(i) and isprime(q) == False:
print(i) # return p, not q
break # stop after first
i += 1 # remember to increment manually
或与next
一起使用itertools.count
:
import itertools
def wrong_prime():
print(next(p for p in itertools.count(1) if isprime(p) and not isprime(2**p-1)))
((当然,给出“提示”,您也可以只使用range(10, 16)
)