Убедитесь, что номера являются простыми в списке - PullRequest
0 голосов
/ 19 мая 2019

Я начал изучать информатику в этом году, и я изучаю 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 ]

2 голосов
/ 19 мая 2019

У вас уже был кусок кода, который берет число и проверяет, является ли оно простым или нет, тогда вместо того, чтобы использовать его, вы заново изобрели колесо и сломали его в процессе (например, вы повторно использовали 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 голосов
/ 20 мая 2019

Я считаю, что проблема проще, чем вы пытаетесь ее решить. У вас есть большинство частей, которые вам нужны, но нам нужно добавить пару вещей, бросить кучу вещей и немного переставить:

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

Большая часть дополнительного кода, содержащегося в других ответах, касается эффективности, и многое еще предстоит узнать. Но вышесказанного достаточно для работы кода.

OUTPUT

> 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, так как использование < вместо <= имеет тенденцию превращать его в простое число!

0 голосов
/ 19 мая 2019

максимальный делитель целого числа 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))
...