[英]prime number indicator indicating huge non-prime numbers as prime numbers
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 或十進制數上失敗,但事實並非如此。
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()
你在第一次運行時就跳出了循環
說你放了 9,想想看
它會失敗 == 2 條件
然后達到 % i ==0 條件,當 9%2 = 1 時,它會返回 YES
這個程序還有很多錯誤,但主要問題是在第一次運行后中斷,這沒有任何意義,如果你刪除中斷並在 else 上打印 if a%i==0 它會工作,但是您可以在其中進行許多優化。
我建議參加一些關於 python 的課程/教程,而不是試圖在沒有一點先驗知識的情況下跳進去
祝你好運
您的代碼實際上甚至一開始就不正確。
您在循環內使用了 'break',在一次 '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')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.