Python 小于或等于n的素数

Python 小于或等于n的素数,python,Python,声明说: 编写一个函数era1(),要求用户输入一个数字n,然后 使用此算法打印所有小于或等于的素数 n 算法: 写一个从2到要计算的最大整数N的数字列表 列表中的第一个数字是质数。把这个数字写成素数列表,B 从列表中删除第一个元素及其倍数 如果列表A中的第一个数字小于平方根N,则返回第二个点 B列表中的数字和列表A中的数字都是搜索的素数 现在,我把这个代码: import math def primo(num): if num < 2: return Fal

声明说:

编写一个函数
era1()
,要求用户输入一个数字
n
,然后 使用此算法打印所有小于或等于的素数
n

算法:

  • 写一个从2到要计算的最大整数N的数字列表
  • 列表中的第一个数字是质数。把这个数字写成素数列表,
    B
  • 从列表中删除第一个元素及其倍数
  • 如果列表
    A
    中的第一个数字小于平方根N,则返回第二个点
  • B
    列表中的数字和列表
    A
    中的数字都是搜索的素数
现在,我把这个代码:

import math

def primo(num):
    if num < 2:
        return False

    i = 2
    for i in range(2, int(math.sqrt(num) + 1)):
        if (num % i == 0):
            return False

    return True

def main():
    n = input("Introdueix un nombre: ")
    B = range(2, n)
    for i in B:
        if primo(i):
            print i        

main()

def era1():
    n = input("Introdueix un nombre: ")
    A = range(2, n + 1)
    B = [A[0]]

    for i in A:
        if i % 2 == 0:
            A.remove(i)

    if A[0] < math.sqrt(n):
        print B + A

era1()
导入数学
def primo(数量):
如果num<2:
返回错误
i=2
对于范围(2,int(math.sqrt(num)+1)中的i:
如果(num%i==0):
返回错误
返回真值
def main():
n=输入(“引子名称:”)
B=范围(2,n)
对于B中的i:
如果primo(i):
打印i
main()
def era1():
n=输入(“引子名称:”)
A=范围(2,n+1)
B=[A[0]]
对于我来说,在一个:
如果i%2==0:
A.删除(i)
如果[0]

结果是不正确的,因为如果我删除其中一个输入,就会出现错误,并且我只需要输入一次。此外,结果不正确,因为
A+B
,列表
B
不是函数main的列表,最终结果只是数字,而不是2和2的倍数。如何才能只输入一个输入,然后最终结果才是正确的?

从列表中删除项目,同时对其进行迭代将产生意外的结果,这会干扰索引

a = [1,2,3,4,5,6,7,8,9]
for thing in a:
    a.remove(thing)


>>> a
[2, 4, 6, 8]
>>> 
您需要找到另一种方法来实现这一点——也许可以创建一个包含您想要保留的项目的新列表。

此算法称为

这是一个简单的算法,可以找到一个整数以下的所有素数 指定的整数。它是在公元前3世纪由 埃拉托斯特尼斯,古希腊数学家

为了开发这个算法,我们将经历上述不同的步骤

  • 首先,我们生成一个列表,其中的数字从2到要计算的最大整数N
  • 我们使用另一个列表C,因为我们可能会使用更高版本来打印初始列表

  • 我们通过C,处理所有小于平方根N的数

  • 我们初始化一个空列表B,每次添加一个素数(这是列表的第一个元素)
  • 我们使用列表理解来过滤倍数,使用:
    (x%firstElement!=0)
C=[x表示C中的x,如果x%firstElement!=0]

  • B是其余数字(大于平方根N的素数)和我们已经检测到的素数的并集
您的代码应该如下所示:

def era1():
    n = input("Introduce a nombre: ")
    #n=120 #To test the
    A = range(2, n + 1) 
    B, C= [],A
    while C[0]< math.sqrt(n): #Condition
        firstElement= C[0]
        B+= [firstElement] #The first number in the list is a prime number. Write this number a list of primes, B.
        C= [x for x in C if x%firstElement!=0] #We use comprehension List to filter multiplies using
    return B+C #The numbers in the B list and those left in List A are all primes searched.

print era1()
def era1():
n=输入(“引入一个名称:”)
#n=120#测试
A=范围(2,n+1)
B、 C=[],A
而C[0]
n=120时的输出:[2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113]


这张图片显示了算法。

实际上,当我使用
era1(49)
运行代码时,最后返回的数字是49,这不是质数。25也是一样。事实上,奇数素数的每一个平方都会出现这种情况。
def era1():
    n = input("Introduce a nombre: ")
    #n=120 #To test the
    A = range(2, n + 1) 
    B, C= [],A
    while C[0]< math.sqrt(n): #Condition
        firstElement= C[0]
        B+= [firstElement] #The first number in the list is a prime number. Write this number a list of primes, B.
        C= [x for x in C if x%firstElement!=0] #We use comprehension List to filter multiplies using
    return B+C #The numbers in the B list and those left in List A are all primes searched.

print era1()