: 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