首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在python中打印素数系列

在python中打印素数系列
EN

Stack Overflow用户
提问于 2018-09-26 05:55:15
回答 2查看 0关注 0票数 0

我正在尝试学习Python编程,而且我对此非常陌生。

我在打印一系列素数从一到百时遇到了问题。我无法弄清楚我的代码有什么问题。

这是我写的; 它打印所有奇数而不是素数:

代码语言:javascript
复制
for num in range(1,101):
    for i in range(2,num):
        if (num%i==0):
            break
        else:
            print(num)
            break
EN

回答 2

Stack Overflow用户

发布于 2018-09-26 14:38:13

break 结束它当前所处的循环。所以,你只是检查它是否可以被2整除,给你所有的奇数。

代码语言:javascript
复制
for num in range(2,101):
    for i in range(2,num):
        if (num%i==0):
            break
    else:
        print(num)

话虽如此,有更好的方法在python中找到素数而不是这个。

代码语言:javascript
复制
for num in range(2,101):
    if is_prime(num):
        print(num)

def is_prime(n):
    for i in range(2, int(math.sqrt(n)) + 1):
        if n % i == 0:
            return False
    return True
票数 0
EN

Stack Overflow用户

发布于 2018-09-26 15:17:31

希腊数学家Eratosthenes在两千多年前发明的一种更好的方法,不是试验分裂,而是通过反复抛出多个素数来筛选。

首先列出从2到最大期望素数的所有数字。然后重复取最小的未交叉数,并将其全部交叉掉; 保持未交叉的数字是素数。

例如,考虑小于30的数字。最初,2被识别为素数,然后4,6,8,10,12,14,16,18,20,22,24,26,28和30被划掉。接下来3被识别为素数,然后划掉6,9,12,15,18,21,24,27和30。下一个素数是5,所以10,15,20,25和30被划掉。等等。剩下的数字是素数:2,3,5,7,11,13,17,19,23和29。

代码语言:javascript
复制
def primes(n):
  sieve = [True] * (n+1)
  for p in range(2, n+1):
    if (sieve[p]):
      print p
      for i in range(p, n+1, p):
        sieve[i] = False

筛网的优化版本分别处理2并仅筛选奇数。此外,由于所有小于当前素数的平方的复合物被较小的素数划掉,内环可以从p ^ 2而不是p开始,外环可以在n的平方根处停止。我将保留优化版本供您使用。

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

https://stackoverflow.com/questions/-100002751

复制
相关文章

相似问题

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