寻找Primes不同的方法

时间:2016-03-26 03:53:53

标签: python

我正在尝试创建一个程序来查找公钥加密系统的素数。我知道素数是一个正整数,除了1和它本身之外没有正除数。我想使用一种方法,它将所有整数从2变为sqrt(n),以判断它是否除以n。

我必须采取“蛮力”#34;接受整数输入种子并返回最低素数的方法; prime number >= seed

我想要的一些例子是:

>>> prime_func(100)
101
>>> prime_func(1000)
1009
>>>prime_func(7)
7
>>>prime_func(3)
5

到目前为止我所拥有的是:

def prime_func(number):

    START = 2
    END = (number**0.5) + 1

    for i in range(START, END):
      if number % i == 0:
         return('Composite')
      else:
         return number

对于return ('Composite')部分,我希望在此之后返回最接近的素数。

2 个答案:

答案 0 :(得分:1)

这可以使用Sieve of Eratosthenes来实现。

<强>代码:

def primes_sieve(limit):
    a = [True] * limit                          # Initialize the primality list
    a[0] = a[1] = False

    for (i, isprime) in enumerate(a):
        if isprime:
            yield i
            for n in range(i*i, limit, i):     # Mark factors non-prime
                a[n] = False

for value in primes_sieve(32):
    print(value)

<强>输出:

2
3
5
7
11
13
17
19
23
29
31

请参阅This Post

答案 1 :(得分:1)

请尝试以下代码:

def prime_func(number):
    number = int(number)
    START = 2
    END = int((number**0.5)) + 1

    if number == 2:
     return 1
    if number == 1:
     return 0

    while True:
        flag = True
        for i in range(START, END):
            if number % i == 0:
                flag = False
                break
        if flag:
            return number
        else:
            number += 1

if __name__ == '__main__':
    num = int(input())
    print(prime_func(num))

输入: 100
输出 101

输入: 1000
输出:1009