第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Python素數(shù)檢查器

Python素數(shù)檢查器

慕斯王 2019-11-18 10:26:24
我一直在嘗試編寫一個將輸入數(shù)字的程序,并檢查它是否是質(zhì)數(shù)。如果數(shù)字實際上是質(zhì)數(shù),那么到目前為止我編寫的代碼可以完美地工作。如果該數(shù)字不是質(zhì)數(shù),則它的行為很奇怪。我想知道是否有人可以告訴我代碼的問題所在。a=2num=13while num > a :  if num%a==0 & a!=num:    print('not prime')    a=a+1  else:    print('prime')    a=(num)+1輸入24時給出的結(jié)果是:不是素數(shù)不是素數(shù)不是素數(shù)素數(shù)我將如何在每個奇數(shù)而不是每個偶數(shù)的素數(shù)上修復報告素數(shù)的錯誤
查看完整描述

3 回答

?
收到一只叮咚

TA貢獻1821條經(jīng)驗 獲得超5個贊

一旦知道數(shù)字不是素數(shù),就需要停止迭代。break一旦找到質(zhì)數(shù)就添加一個,退出while循環(huán)。


只需對代碼進行最少的更改即可使其工作:


a=2

num=13

while num > a :

  if num%a==0 & a!=num:

    print('not prime')

    break

  i += 1

else: # loop not exited via break

  print('prime')

您的算法等效于:


for a in range(a, num):

    if a % num == 0:

        print('not prime')

        break

else: # loop not exited via break

    print('prime')

如果將其放入函數(shù)中,則可以免除breakfor-else:


def is_prime(n):

    for i in range(3, n):

        if n % i == 0:

            return False

    return True

即使您要像這樣強力求素,也只需要迭代到的平方根即可n。另外,您可以跳過測試2之后的偶數(shù)。


這些建議如下:


import math

def is_prime(n):

    if n % 2 == 0 and n > 2: 

        return False

    for i in range(3, int(math.sqrt(n)) + 1, 2):

        if n % i == 0:

            return False

    return True

請注意,此代碼不能正確處理0,1和負數(shù)。


通過all與生成器表達式一起使用來替換for循環(huán),我們使此過程更簡單。


import math

def is_prime(n):

    if n % 2 == 0 and n > 2: 

        return False

    return all(n % i for i in range(3, int(math.sqrt(n)) + 1, 2))


查看完整回答
反對 回復 2019-11-18
?
嚕嚕噠

TA貢獻1784條經(jīng)驗 獲得超7個贊

您的代碼存在兩個主要問題:

  1. 在指定一個非素數(shù)之后,即使您已經(jīng)知道它不是素數(shù),也要繼續(xù)檢查其余除數(shù),這可能導致它在打印“非素數(shù)”之后打印“素數(shù)”。提示:使用“ break”語句。

  2. 在檢查所有需要檢查的除數(shù)之前,請指定一個數(shù)字質(zhì)數(shù),因為您正在循環(huán)內(nèi)打印“質(zhì)數(shù)” 。因此,您會多次獲得“素數(shù)”,對于每個除數(shù)不均等地進入被測數(shù)的除數(shù)。提示:else僅在循環(huán)退出而不會中斷的情況下,才在循環(huán)中使用子句以顯示“素數(shù)”。

效率非常低下:

  1. 您應該跟蹤已經(jīng)找到的質(zhì)數(shù),并且只能除以這些數(shù)。如果已經(jīng)被2除,為什么要除以4?如果一個數(shù)字可被4整除,那么它也可被2整除,因此您早已將其捕獲,因此無需將其除以4。

  2. 您只需要測試被測試數(shù)的平方根,因為任何大于該因數(shù)的因數(shù)都需要乘以一個小于該因數(shù)的數(shù),并且在您獲得更大的因數(shù)時就已經(jīng)進行了測試。


查看完整回答
反對 回復 2019-11-18
  • 3 回答
  • 0 關(guān)注
  • 404 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號