经典题,求出小于 N(比如100)的所有质数。
质数的定义还是不厌其烦赘述一下:大于1的正整数,且不能被1和它本身之外的正整数整除。质数又称素数,其他的就是合数。
本文用python实现。
1,试除法
根据质数的定义,很容易得出直接的推导:遍历2到N,对每个数 i ,都用2到 i 的整数去试除 i,一旦 i 被整除,说明它是合数。
def prime(N):
ret = [2] #第一个质数是2
for i in range(3, N+1):
for j in range(2, math.ceil((math.sqrt(i)))+1): #从2遍历到根号i
if i%j == 0:
break
else: #一旦被整除break,就不会进else
ret.append(i)
print(ret)
其中细节优化是试除时,只需遍历2到根号i ,没必要遍历到 i。因为 i 若是合数,除数和商必然有一个小于等于根号 i,另一个大于等于根号 i。
2,