为了账号安全,请及时绑定邮箱和手机立即绑定

素数指示器将巨大的非素数指示为素数

素数指示器将巨大的非素数指示为素数

慕莱坞森 2023-06-27 16:09:24
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 或十进制数字上失败,但事实并非如此。
查看完整描述

3 回答

?
慕沐林林

TA贡献2016条经验 获得超9个赞

for 循环永远不会运行到最后,因为无论a % i == 0您是否会打破循环。您应该将您的代码移到print("YES")循环之外并使用return代替break来确保您的函数在循环中断时不会运行此代码。尝试这个:


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()


查看完整回答
反对 回复 2023-06-27
?
繁花如伊

TA贡献2012条经验 获得超12个赞

您的代码实际上从一开始就是不正确的。

在一次“if”检查之后,您在循环内使用“break”,所以基本上您只检查一次。所以你的代码所做的就是判断这个数字是否能被 2 整除。


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')


查看完整回答
反对 回复 2023-06-27
?
回首忆惘然

TA贡献1847条经验 获得超11个赞

你在第一次运行时打破了循环,

假设你把 9 放进去,想想它

会失败 == 2 条件

,然后达到 % i ==0 条件,并且 9%2 = 1,它会返回是


除此之外,该程序还有很多错误,但主要问题是在第一次运行后中断,这没有任何意义,如果您删除了中断并在 else 上打印 if a%i==0 它将起作用,但是您可以在那里进行许多优化。

查看完整回答
反对 回复 2023-06-27
  • 3 回答
  • 0 关注
  • 158 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信