Re: [问题] 质数_巢状循环_菲丝恩

楼主: APM99 (血统纯正台北人)   2017-08-10 12:50:28
: 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
楼主: APM99 (血统纯正台北人)   2017-08-10 12:52:00
py3用四舍五入法得要 round(i/j + 0.0000000000001) 才行
作者: CaptainH (Cannon)   2017-08-10 12:59:00
你是不是误会了什么 要判断29是不是被7整除 只要他妈的除一下就好四舍入+0.5好就 加一个0.000...1不知道搞什么鬼或者用ceil/floor 根本没这问题
作者: bruce0209 (士贤)   2017-08-10 13:12:00
要判断29是不是被7整除 我也思考了很久在说啥…
作者: Django (Cython)   2017-08-10 15:47:00
?????????
作者: nknuukyo (我无所能因敌成体)   2017-08-10 16:00:00
谢谢~wiki里有一段python3.6的引码,不晓得是否方便说明对应到原程式的关系^^"
作者: bruce0209 (士贤)   2017-08-10 16:20:00
楼上是说sieve of Eratosthenes的wiki吗?如果是的话 wiki里面那个是用删除法的 和这边不太一样你可以看他wiki里面附的jpg应该就知道他在做什么了是说...有程式码了怎么不自己trace看看
作者: stucode   2017-08-10 19:34:00
... 先不论原本的lemma是什么 你的code真的是问题满载
作者: bruce0209 (士贤)   2017-08-10 19:37:00
postive?????? 豆页女子痛...推荐可以看一下clear code相关书.......
作者: stucode   2017-08-10 19:44:00
isprime就return n 那while isprime:是?每次call一开始j都是1 那n/j是在表现什么?
作者: CaptainH (Cannon)   2017-08-10 20:43:00
愈写愈错XDD 平铺直叙的算法也能写这么丑XDD

Links booklink

Contact Us: admin [ a t ] ucptt.com