首页 > 解决方案 > 验证列表中哪些数字是素数

问题描述

我正在尝试验证列表中的哪些数字是素数。

vetor = [2,3,4,5,11,15,20]
divisions_list = []

def isprime():                     
    divisions = 0
    i = 0
    for i in range(1, vetor[i+1]):
        if i % i == 0:
            divisions = divisions + 1
            divisions_list.append(divisions)
        if divisions == 2:
            print('The number {} is prime'.format(vetor[i]))
        else:
            print('The number {} is not prime'.format(vetor[i]))

print(isprime())

但这不起作用,我只收到:

数字 3 不是素数 数字 4 是素数 无

我怎样才能解决这个问题?

标签: pythonloopsiterationprimes

解决方案


您已经有一段代码接受一个数字并检查它是否是素数,然后您没有使用它,而是重新发明了轮子并在此过程中破坏了它(例如,您重新使用i了导致除以零的并尝试检查列表是否等于 2,而不是检查其长度是否为 2)。

使用函数重用工作代码并进行一些改进:

  • 你并不关心有多少数字除以你检查的数字。一个数字将其除以使该数字不是素数就足够了

  • 我们可以从 2 开始除法检查,从数学上证明,向上到数字的平方根就足够了


from math import sqrt

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

然后将它与数字列表一起使用:

vector= [2, 3, 4, 5, 11, 15, 20]

for n in vector:
    if is_prime(n):
        print(n, 'is a prime')
    else:
        print(n, 'is not a prime')

输出

2 is a prime
3 is a prime
4 is not a prime
5 is a prime
11 is a prime
15 is not a prime
20 is not a prime

推荐阅读