【发布时间】:2016-07-15 21:09:15
【问题描述】:
我试图找出任意两个随机数之间的素数。
首先,我编写了如下代码:
m,n = map(int, raw_input().split())
for i in range(m, n+1):
for j in range(2, i):
if i%j == 0:
break
else:
print i,
现在对于测试用例假设我输入 2, 30 然后它会打印出来
2 3 5 7 11 13 17 19 23 29
现在分析,我们不需要在第二个循环中循环到“i”,而是可以通过循环到 i/2 来做同样的事情,然后我将代码更改为:
m,n = map(int, raw_input().split())
for i in range(m, n+1):
for j in range(2, int(i/2)+1):
if i%j == 0:
break
else:
print i,
然后我们在第二个循环中循环到 i/2 时,结果与上面相同。
现在,我正在尝试使用 Eratosthenes 筛法打印素数,我使用的代码如下:
m,n = map(int, raw_input().split())
for i in range(m, n+1):
sqrt_num = int(n**(0.5))
for j in range(2, sqrt_num+1):
if i%j == 0:
break
else:
print i,
但它会打印出来
7 11 13 17 19 23 29
对于相同的输入。
请帮助我理解我做错了什么。以及如何使用这种方法完成同样的任务。
【问题讨论】:
-
您是否在 [24..28] 这样的数字范围内测试过您的代码?
-
是的,它不打印任何数字,因为 [24..28] 中没有素数。
标签: python primes sieve-of-eratosthenes