Python中的Belphegor素数问题
我看过一段关于贝尔菲戈素数的视频。Belphegor素数的定义是这样的:在表达式Python中的Belphegor素数问题,python,Python,我看过一段关于贝尔菲戈素数的视频。Belphegor素数的定义是这样的:在表达式(10^(n+3)+666)*(10^(n+1)+1)中,n是正整数的素数 我试着制作一个Python程序来确定输入数字n是否会在前面提到的表达式中生成素数,但是我的代码说表达式中的所有n都将是素数,这是不正确的,并且它无限期地表示 我的代码: n=int(输入(“输入正数n:”) x=(10**(n+3)+666)*10**(n+1)+1 对于范围(2,x-1)内的i: 如果x%i==0: 打印(“合成”) 其他:
(10^(n+3)+666)*(10^(n+1)+1)
中,n
是正整数的素数
我试着制作一个Python程序来确定输入数字n
是否会在前面提到的表达式中生成素数,但是我的代码说表达式中的所有n
都将是素数,这是不正确的,并且它无限期地表示
我的代码:
n=int(输入(“输入正数n:”)
x=(10**(n+3)+666)*10**(n+1)+1
对于范围(2,x-1)内的i:
如果x%i==0:
打印(“合成”)
其他:
打印(“贝尔菲戈素数”)
请帮我修复这个错误 您的问题是,在循环的每次迭代中,您的代码都会打印出
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
时遗漏了一些()
,您给出的输入是什么,错误是什么?我想您忘记了一些括号:x=(10**(n+3)+666)*(10**(n+1)+1)
您是否尝试过在纸上/脑海中浏览代码的执行过程?