验证列表中哪些数字是质数

问题描述 投票:0回答:3

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

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是素数无

我该如何解决?

python loops iteration primes
3个回答
2
投票

您已经有一段代码接受一个数字并检查它是否是质数,然后您重新发明了轮子并在此过程中弄坏了它,而不是使用它(例如,您重复使用了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

0
投票

整数x的最大除数,确定为x // 2而不是sqr(x)而不是sqrt(x)+1,这是数学的

例如x = 16,sqrt(x)= 4,sqr(x)+ 1 = 5但是16的最大除数是8(真的16 // 2)

"""
verify prime or not in a list of number
"""

# my function :) 
def isPrime(x):
    """
    function get an integer as argument, and return True if this argument is prime and False if not
    """
    i = 2
    while i<=x//2 :
        if x%i != 0:
            i += 1
        else:
            return False
    return True 


# your code :) 
vetor = [2,3,4,5,11,15,20]

# for all elements e in vetor
for e in vetor:
    # test the return of isPrime function applied to arg e
    if isPrime(e):
        print("{} is prime number".format(e))
    else:
        print("{} is not prime number".format(e))

0
投票

我相信这个问题比您要解决的要简单。您拥有所需的大部分零件,但是我们需要添加一些东西,扔很多东西,然后重新排列一下:

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

def isprime():
    for number in vetor:
        if number < 2:
            print('The number {} is not prime'.format(number))
            continue

        i = 2

        while i * i <= number:
            if number % i == 0:
                print('The number {} is not prime'.format(number))
                break

            i += 1
        else:  # no break
            print('The number {} is prime'.format(number))

isprime()

其他答案包含的许多其他代码都与效率有关,还有很多东西要学习。但是以上内容足以使代码正常工作。

输出

> python3 test.py
The number 2 is prime
The number 3 is prime
The number 4 is not prime
The number 5 is prime
The number 11 is prime
The number 15 is not prime
The number 20 is not prime
>

我最喜欢包含在素数测试中的数字是25,因为使用<而不是<=会使它变成素数!

© www.soinside.com 2019 - 2024. All rights reserved.