首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >寻找素数不同的方法

问寻找素数不同的方法
EN

Stack Overflow用户
提问于 2016-03-26 03:53:53
回答 2查看 154关注 0票数 0

我试图制作一个程序,为公钥密码系统查找素数。我知道素数是一个正整数,除了1和它本身没有正数除数。我想使用一种从2到sqrt(n)的所有整数的方法,来判断它是否除以n。

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

我想要的一些例子是:

代码语言:javascript
复制
>>> prime_func(100)
101
>>> prime_func(1000)
1009
>>>prime_func(7)
7
>>>prime_func(3)
5

到目前为止,我得到的是:

代码语言:javascript
复制
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')部分,我希望它在此之后返回最近的素数。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-03-26 04:26:40

尝试以下代码:

代码语言:javascript
复制
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

票数 1
EN

Stack Overflow用户

发布于 2016-03-26 04:21:12

这可以使用埃拉托斯提尼筛来实现。

代码:

代码语言:javascript
复制
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)

输出:

代码语言:javascript
复制
2
3
5
7
11
13
17
19
23
29
31

见这篇文章。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36231437

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档