: i=j=1
: for i in range(2,100,1):
: for j in range(2,int(i/j)+1):
: if(not i%j):
: break
: if j>i**0.5:
: print('%d is prime'%(i))
這裡用的數學方法是大家高中都學過的
Sieve of Eratosthenes(wiki中文:埃拉托斯特尼篩法)
其中的一個引理
想判斷 i = 29 能不能被 7 整除
只需要判斷4項 ,即 29/2 29/3 29/4 29/5 能不能整除
驗證 29/6 已經沒意義了,因為 7*5 已經大於29了
i/j是一種等分的概念.
#回到python虛擬碼
i=j=1
for i in range(2,100,1):
for j in range(2,(無條件進位到整數的i/j) +1):
if(not i%j):
break
if j>i**0.5:
print('%d is prime'%(i))
#
1. 灰色 +1 是python range特性
2. 淺藍色可能只是想打出2,不然跟等分法並不連貫~,
3. 紅色部分
一般都是取巧用四捨五入法,結果python沒印出 5..
才發現
python3 中 round(2.5) = 2
python2 中 round(2.5) = 3
可見
https://stackoverflow.com/questions/10825926/python-3-x-rounding-behavior