【问题标题】:Attempting a Sieve of Eratosthenes python function尝试筛选 Eratosthenes python 函数
【发布时间】:2021-05-20 04:30:54
【问题描述】:

我对 python/编程很陌生,我一直在尝试筛选 Eratosthenes 函数程序,但似乎我的代码输出了不希望的结果。此外,对此我也不知道程序如何输出该特定解决方案。请有人帮助我并解释当前的输出以及我应该如何着手和修复这个程序,以便它可以打印素数。

亲切的问候!

#Sieve Code 

import math
numbers = []

def sieve_method(n):
    global numbers
    for n in range(2, n + 1):
        for J in range (2, int(math.sqrt(n))+1):
            if J in numbers:
                multiple = n*J 
                while multiple <= n:
                    if multiple in numbers:
                        numbers.remove(n)
                J += multiple
            numbers.append(n)
        print(numbers) 

sieve_method(10)
#CURRENT OUTPUT 
#[]
#[]
#[4]
#[4, 5]
#[4, 5, 6]
#[4, 5, 6, 7]
#[4, 5, 6, 7, 8]
#[4, 5, 6, 7, 8, 9, 9]
#[4, 5, 6, 7, 8, 9, 9, 10, 10]

【问题讨论】:

  • 那根本不是eratosthenes的筛子
  • 如果你使用更有意义的变量名会很有帮助。
  • codereview.stackexchange.com/a/194762/226167 。您可以在codereview 上发现不同的人多次尝试筛算法。
  • 请通过intro tourhelp centerhow to ask a good question 了解本网站的工作原理并帮助您改进当前和未来的问题,从而帮助您获得更好的答案。由于无意义的变量名称和缺乏 cmets 或结构,我看不出你是如何认为你正在构建筛子。

标签: python sieve-of-eratosthenes


【解决方案1】:

好的,因为这不是 Erathnostenes 筛的真正实现,而只是一个生成素数的函数(这不完全是一个筛分过程),这里是一个真正的筛算法代码:

def sieve(n):
   sieved = list(range(2, n+1))
   for n in sieved:
       for J in range(2, n+1):
           if n%J==0:
               sieved.remove(n)
               print(sieved)
               break
       print(sieved)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-19
    相关资源
    最近更新 更多