验证列表中的数字是质数

时间:2019-05-19 13:36:42

标签: python loops iteration primes

我从今年开始学习计算机科学,现在我正在学习Python(:所以,请问,如果我的问题对您来说很愚蠢,请不要生我的气,在阅读旧问题时我没有找到任何答案。 ...

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

这是我的验证素数列表的代码:

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

如果您读到这里,可以给我一些建议吗?非常感谢!

3 个答案:

答案 0 :(得分:2)

您已经有一段使用数字的代码,并检查它是否为质数,然后,您重新使用了滚轮,并在此过程中对其进行了破坏(例如,重复使用{{1 }}导致被零除,并试图检查列表是否等于2,而不是检查列表的长度是否为2)。

使用功能来重用工作代码并进行一些改进:

  • 您实际上并不关心要检查的数字有多少个数字。一个数字除以该数字就不会是素数就足够了

  • 我们可以从2开始进行除法检查,并且在数学上证明了足以达到数字的平方根


i

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

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')

答案 1 :(得分: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))

答案 2 :(得分: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,因为使用<而不是<=会使它变成素数!