如何合并Eratosthenes算法的筛网以找到素数?

时间:2019-02-24 05:15:58

标签: python python-2.7 sieve-of-eratosthenes

为澄清起见,这与问题Sieve of Eratosthenes - Finding Primes Python不同,因为我不想在两个数字之间生成素数,但是我想检查一个数字是否是素数。

我编写了以下代码来查找数字是否为质数。然后我听说了Eratosthenes算法的Sieve,它显然更快,但是我不知道如何在以下代码中编写它?

number1 = int(raw_input("""
Enter any number :- """))
if number1 == 1:
    print "1 is a special case. It is neither a Prime Number nor a Normal Number. Be like 1"
if number1 == 2:
    print number1, "is a Prime Number"
if number1 == 4:
    print "4 is not a Prime Number"
    print "2 times 2 is 4"
if number1 > 1:
    for i in range(2,(number1//2)):
        if number1 % i == 0:
            print number1, "is not a Prime Number"
            print i, "times", (number1/i), "is", number1
            break
    else:
        print number1, "is a Prime Number"
else:
    print "Please type a positive number only"    

你们能帮我吗?

2 个答案:

答案 0 :(得分:0)

我在repl.it上做到了。我做到了,所以每次找到质数时,我都会将其存储在列表中。

在计算数字是否为质数时,我将遍历列表中的所有数字,而不是遍历所有数字。

这模拟了您对eratasthenes筛子的反应。

答案 1 :(得分:0)

Eratosthenes筛是一种生成素数的方法。因此它将替换您的代码:

for i in range(2,(number1//2)):
    if number1 % i == 0:
        # handle non-prime

使用

if number1 in previous_generated_primes:
    # handle non-prime