問題描述:
素數(質數)指的是不能被分解的數,除了1和它本身之外就沒有其他數能夠整除。
求100以內的所有素數。
我的代碼:
import math def prime(n): count=0 for i in range(2,int(math.sqrt(n))+1): if n%i==0: count=1 if count!=1: return True else: return False a=[] for j in range(2,100): if prime(j): a.append(j) print a
結果:
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]
我的思路:
原理:在一般領域,對正整數n,如果用2到n的平方根之間的所有整數去除,均無法整除,則n爲質數。
大致流程是:先定義一個函數,判斷傳入的數是否爲素數,然後使用該函數遍歷100以內的數,將滿足的數添加進列表,最後再輸出;
其中,count是一個狀態檢查器,值爲1時表示不是素數,爲0時表示是素數;
示例代碼:
def isPrimeNumber(n, s): for k in s: if k * k > n: break if n % k == 0: return None return n prime = [] for n in range(2, 100): res = isPrimeNumber(n, prime) if res: prime.append(res) print prime
代碼分析:
示例代碼不是用一個數的2到n的平方根之間的所有整數去除,而是用所有的素數平方值小於該數之間的素數去除,所以,函數內,第一個if語句是判斷(都是素數)列表s內的數的平方值大小,只保留小於n的素數,第二個if語句是判斷n是否可以整除保留的素數,只有都無法整除時才說明n是一個素數並返回。
最後,遍歷2到100以內的數,將滿足函數的賦給res並添加進素數列表prime中,供下次使用;