Python中的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: 打印(“合成”) 其他:

我看过一段关于贝尔菲戈素数的视频。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:
打印(“合成”)
其他:
打印(“贝尔菲戈素数”)

请帮我修复这个错误

您的问题是,在循环的每次迭代中,您的代码都会打印出
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)
您是否尝试过在纸上/脑海中浏览代码的执行过程?