Python在任意两个数字之间查找Prime数字

时间:2016-07-15 21:09:16

标签: python primes sieve-of-eratosthenes

我正在尝试在任意两个随机数之间找到素数。

首先,我编写了如下代码:

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。

现在,我正在尝试使用Sierat of 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

输入相同的内容。

请帮助我理解我做错了什么。以及如何使用这种方法完成同样的工作。

1 个答案:

答案 0 :(得分:2)

您的内部循环用于循环直到i-1i/2。 <{1}}较小时内圈较短,i较大时较长。

现在,你的内部循环上升到i,这是一个从sqrt_num计算的常量。行为上的差异。

考虑n,内部循环从i = 3运行到j = 2,并且会找到j = 5 ...具体地说,i%j == 0时的情况。

要明确:问题是&#34; j == 3,这是一个常数&#34;。将其更改为外部索引的平方根sqrt_num

i