首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >表示作为素数的巨大非素数的素数指示符

表示作为素数的巨大非素数的素数指示符
EN

Stack Overflow用户
提问于 2020-08-28 12:37:17
回答 3查看 53关注 0票数 0
代码语言:javascript
复制
def main():
    try:
        a = int(input())
        if isinstance(a, int):
            a = int(a)
            if a ==2:
                print('YES')
            if a > 1:
                for i in range(2, a):
                    if a % i == 0:
                        print('NO')
                        break
                    else:
                        print('YES')
                        break
            else:
                print('NO')
        else:
            print('NO')
    except EOFError:
        print('NO')
    except ValueError:
        print('NO')
main()

这段代码正在工作,但它正在将巨大的数字计算为素数,例如3456734572525。它在5个测试案例中有4个是成功的。首先,我以为它在0或十进制数上失败了,但事实并非如此。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-08-28 13:06:09

for循环永远不会运行到末尾,因为不管a % i == 0是否会中断循环。您应该将print("YES")移出循环之外,并使用return代替break,以确保如果循环中断,函数不会运行这段代码。试试这个:

代码语言:javascript
复制
def main():
    try:
        a = int(input())
        if isinstance(a, int):
            a = int(a)
            if a ==2:
                print('YES')
            if a > 1:
                for i in range(2, a):
                    if a % i == 0:
                        print('NO')
                        return
                print('YES')
                return
            else:
                print('NO')
        else:
            print('NO')
    except EOFError:
        print('NO')
    except ValueError:
        print('NO')
main()
票数 0
EN

Stack Overflow用户

发布于 2020-08-28 13:07:05

你在第一次穿越的时候就突破了循环

如果你投了9个,好好想想

它将使== 2条件失败。

然后进入%i ==0条件,当9%2 = 1时,它将返回YES

这个程序有很多错误,但是主要的问题是在第一次运行之后中断,这是没有任何意义的,如果您删除了断点并打印到if a%i==0上,那么它将工作,但是您可以在其中添加许多优化。

我记得我参加了一些关于python的课程/教程,并且不想在很少的先验知识的情况下跳进去。

祝好运

票数 0
EN

Stack Overflow用户

发布于 2020-08-28 13:13:45

您的代码实际上是不正确的,甚至一开始。

你在循环中使用‘打断’,在一个'if‘检查之后,所以基本上你只检查一次。所以你的代码就是告诉这个数字是否可以被2整除。

代码语言:javascript
复制
try:
    a = int(input())
    flag = 0
    if isinstance(a, int):
        a = int(a)
        if a==1:
            print('Neither')
        elif a ==2:
            print('YES')
        else:
            for i in range(2, a):
                if a % i == 0:
                    flag=1
                    break
    else:
        print('NO')
except EOFError:
    print('NO')
except ValueError:
    print('NO')
if flag:
    print('NO')
else:
    print('YES')
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63633935

复制
相关文章

相似问题

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