|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
看到大家都在讨论欧拉练习中的求100W以内的神奇质数问题,无奈鄙人才疏学浅,无法单独写出答案,因而鄙人退而求次,求100以内的所有质数,用了两个循环,代码如下
- zhishu = []
- for each in range(2,100):
- for i in range(2,int(each)):
- if each % i != 0:
- zhishu.append(each)
- break
- print(zhishu)
复制代码
但是得出的结果却是如下
- [3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41, 43, 45, 47, 49, 51, 53, 55, 57, 59, 61, 63, 65, 67, 69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89, 91, 93, 95, 97, 99]
复制代码
很显然这些数中有些不是质数,通过degbug看到,问题原因在第二个循环for i in range(2,int(each)),在该循环中,i的第一个值为2,如果碰到each的值为5,碰巧没有问题,但是如果each为9,虽然i等于2时无法整除,但是当i为3时可以整除,而第一次each % i 刚好不等于0,所以满足了判断条件’
而如果不写break,又有其他问题
因此这段代码要如何修改?就是要实现第二个循环中从(2,each)连续取值进行除法
修改了一下:
- zhishu = []
- for each in range(2,100):
- for i in range(2, each):
- if each % i == 0:
- break
- else:
- zhishu.append(each)
- print(zhishu)
复制代码
程序还有一些可以优化的地方。
|
|