首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >检查python中的素数

检查python中的素数
EN

Stack Overflow用户
提问于 2019-06-12 08:54:41
回答 6查看 2.2K关注 0票数 0

我写这个程序是为了检查“否”的情况。是否为素数,但它会多次显示该数字为素数。我该怎么解决呢?

若要检查该数字是否为素数,请检查是否为正数。

代码语言:javascript
运行
复制
num = int(input("please enter the number you want to check\n"))

if num > 1:
    for i in range(2, num):
        if (num % i) == 0:
            print("the number is not prime")
            print(str(i) + " times " + str(num//i) + " is "+ str(num))
            break
        else:
            print("the number is prime")
elif(num == 1):
    print("the number is not prime")
else:
    print('enter a positive value')
EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2019-06-12 09:00:02

您的问题是,for-循环的else部分是错误的。每次除法检查失败时,您都会打印"the number is prime",而不仅仅是在最后。

我添加了一个isPrime布尔值,用于跟踪单个检查是否失败。只有当none失败时,才能打印出该数字是素数。

代码语言:javascript
运行
复制
num = int(input("please enter the number you want to check\n"))

if num > 1:
    isPrime = True
    for i in range(2, num):
        if (num % i) == 0:
            print("the number is not prime")
            print(str(i) + " times " + str(num//i) + " is "+ str(num))
            isPrime = False
            break
    if isPrime:
        print("the number is prime")
elif(num == 1):
    print("the number is not prime")
else:
    print('enter a positive value')

您可以通过一个名为换-否则的python构造(@TheGamer007 007的学分)进一步简化它:

代码语言:javascript
运行
复制
num = int(input("please enter the number you want to check\n"))

if num > 1:
    for i in range(2, num):
        if (num % i) == 0:
            print("the number is not prime")
            print(str(i) + " times " + str(num//i) + " is "+ str(num))
            break
    else:
        print("the number is prime")
elif(num == 1):
    print("the number is not prime")
else:
    print('enter a positive value')

它可以工作,因为Python的for-loops可以有一个else:追随者,只有在不脱离循环的情况下才会触发。

这可能正是你想要做的。在这种情况下,你所做的只是你的缩进。

此外,从算法的角度来看,有更好的方法来检验。第一个简单的改进是您不需要检查range(2,num),而只需要检查range(2, int(math.sqrt(num))+1)

票数 1
EN

Stack Overflow用户

发布于 2020-11-22 17:01:07

这是我的代码,用来检查一个数字是否是素数,希望它有帮助。

代码语言:javascript
运行
复制
# Program to Check whether given number is prime

def isPrime(number):
    limit = int(number/2) # limit indicates how many times we need to run the loop
    flag=0                # to keep track whether the number is prime or not
    if number==0 or number==1:
        print(f"The Given Number {number} is Not Prime")
        return
    for i in range(2,limit+1):
        if number%i==0:
            flag=1
            break
    if flag==0:
        print(f"The Given Number {number} is Prime")
    else:
        print(f"The Given Number {number} is Not Prime")

isPrime(1)

票数 2
EN

Stack Overflow用户

发布于 2019-06-12 08:59:51

例如,使用一个变量,并将其初始化为0。如果数字不是素数,即i%2==0将标志设置为1并断开,否则标志=0。

然后从for块中出来,在if条件的帮助下显示数字是否为素数。也就是说,如果flag==0的数字是素数,则不是。

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

https://stackoverflow.com/questions/56558234

复制
相关文章

相似问题

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