我看过一个关于Belphegor质数的视频。Belphegor素数的定义是这样的:在表达式中,对于正整数n,(10^(n+3)+666)*(10^(n+1)+1)是素数。
我试着编写了一个Python程序,它将确定输入的数字质数是否会在前面提到的表达式中产生质数,但我的代码说,对于表达式中的所有素数,n都是质数,但这不是真的,它无限地说了这一点。
我的代码:
n = int(input("Enter a positive number n: "))
x =(10**(n+3)+666)*10**(n+1)+1
for i in range(2,x - 1):
if x % i == 0:
print("Composite")
else:
print("Belphegor prime")请帮我修复这个错误!
发布于 2020-02-20 09:12:26
您的问题是,您的代码在循环中的每个迭代中打印出Composite或Prime。相反,您需要假设该数字是质数,如果在任何时候测试失败,则将一个标志设置为false;然后使用循环末尾的标志的状态来确定该数字是否实际上是质数:
from math import sqrt
n = int(input("Enter a positive number n: "))
x =(10**(n+3)+666)*(10**(n+1)+1)
p = True
for i in range(2,int(sqrt(x))+1):
if x % i == 0:
p = False
break
if p:
print("Belphegor prime")
else:
print("Composite")注意,你可以通过只迭代到sqrt(x)来缩短你的循环,因为任何大于sqrt(x)的数,x的除数都会有一个小于sqrt(x)的匹配除数。
还要注意的是,正如@LeoE在你的问题的评论中指出的那样,你在计算x时遗漏了一些()。
https://stackoverflow.com/questions/60311433
复制相似问题