簡體   English   中英

素數指示器指示巨大的非素數作為素數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM