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或十进制数上失败了,但事实并非如此。
发布于 2020-08-28 13:06:09
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()发布于 2020-08-28 13:07:05
你在第一次穿越的时候就突破了循环
如果你投了9个,好好想想
它将使== 2条件失败。
然后进入%i ==0条件,当9%2 = 1时,它将返回YES
这个程序有很多错误,但是主要的问题是在第一次运行之后中断,这是没有任何意义的,如果您删除了断点并打印到if a%i==0上,那么它将工作,但是您可以在其中添加许多优化。
我记得我参加了一些关于python的课程/教程,并且不想在很少的先验知识的情况下跳进去。
祝好运
发布于 2020-08-28 13:13:45
您的代码实际上是不正确的,甚至一开始。
你在循环中使用‘打断’,在一个'if‘检查之后,所以基本上你只检查一次。所以你的代码就是告诉这个数字是否可以被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')https://stackoverflow.com/questions/63633935
复制相似问题