首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python中的Belphegor素数问题

Python中的Belphegor素数问题
EN

Stack Overflow用户
提问于 2020-02-20 08:51:56
回答 1查看 72关注 0票数 2

我看过一个关于Belphegor质数的视频。Belphegor素数的定义是这样的:在表达式中,对于正整数n(10^(n+3)+666)*(10^(n+1)+1)是素数。

我试着编写了一个Python程序,它将确定输入的数字质数是否会在前面提到的表达式中产生质数,但我的代码说,对于表达式中的所有素数,n都是质数,但这不是真的,它无限地说了这一点。

我的代码:

代码语言:javascript
复制
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")

请帮我修复这个错误!

EN

回答 1

Stack Overflow用户

发布于 2020-02-20 09:12:26

您的问题是,您的代码在循环中的每个迭代中打印出CompositePrime。相反,您需要假设该数字是质数,如果在任何时候测试失败,则将一个标志设置为false;然后使用循环末尾的标志的状态来确定该数字是否实际上是质数:

代码语言:javascript
复制
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时遗漏了一些()

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60311433

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档