Ищите разъяснения о том, как работает этот «For-Loop» - PullRequest
0 голосов
/ 05 сентября 2018

Я начинающий программист, так что прости меня за мою наивность.

Я хотел создать программу на Python, которая позволяла бы мне печатать заданное N число простых чисел, где N вводится пользователем. Я немного искал петли "for / while" и немного повозился. Я запустил программу, которую я видел в Интернете, и изменил ее в соответствии с проблемой. Вот код:

i = 1

print("Hi! Let's print the first N prime numbers.")
nPrimes = int(input("Enter your N: "))

counter =  0

while True:
    c = 0 #another initialization
    for x in range (1, (i + 1)):
        a = i % x # "a" is a new variable that got introduced.
        if a == 0:
            c = c + 1
    if c == 2:
        print(i, end = "  ")
        counter = counter + 1
        if counter > = nPrimes: #if it reaches the number input, the loop will end.
            break
    i = i+1

print(":  Are your", nPrimes, "prime number/s!")
print()
print("Thanks for trying!")

Это должно быть в состоянии вывести количество простых чисел, которые пользователь так любит. Это рабочий код, хотя я с трудом пытаюсь его понять. Кажется, что переменная c важна при принятии решения о том, печатать или нет переменную i (которая в нашем случае является предполагаемым простым числом в течение этого интервала).

Мы делаем от c + 1 до c каждый раз, когда наша переменная a имеет остаток 0 в a = i % x. Затем, если c достигает 2, текущая переменная i печатается, а переменная c повторно инициализируется до 0, как только простое число было найдено и напечатано.

Это я могу понять, но я запутался, когда числа i достигли значений 4 и далее. * Каким образом 4 пропускается программой и не печатается, если в диапазоне от 2 до 2 факторов ее остаток равен нулю? Не будет c == 2 для 4 и, следовательно, вывести 4? * А как программа перейдет к следующему номеру 5? (Учитывая, что переменная N является достаточно большим вводом).

Любые разъяснения будут с благодарностью. Большое вам спасибо!

Ответы [ 2 ]

0 голосов
/ 05 сентября 2018

Из Википедии мы знаем:

Простое число (или простое число) - это натуральное число, большее 1, которое не может быть образовано умножением двух меньших натуральных чисел.

Таким образом, найти простое число - это найти натуральное число, то есть целое число, которое может быть только точно разделенным на 1 или на себя. Это называется Подход определения для поиска простых чисел.

Следовательно, следующий цикл перебирает все целые числа от 1 до i, и он подсчитывает, сколько раз целое число i может быть точно разделено на них.

for x in range (1, (i + 1)):
    a = i % x # "a" is a new variable that got introduced.
    if a == 0:
        c = c + 1

И позже вы судите, может ли целое число i быть только точно разделенным на 1 и на себя. Если это правда, у вас есть простое число; в противном случае вы просто продолжаете.

if c == 2:
    print(i, end = "  ")
    counter = counter + 1
    if counter > = nPrimes: #if it reaches the number input, the loop will end.
        break

Между тем, вы можете немного улучшить этот алгоритм простого поиска, изменив i = 1 на i = 2 в начале и добавив оператор if:

# Start from 2 instead of 1
# and end at `i - 1` instead of `i`
for x in range (2, i):
    a = i % x # "a" is a new variable that got introduced.
    if a == 0:
        c = c + 1

    # Abandon the loop
    # because an integer with factors other than 1 and itself
    # is unevitably a composite number, not a prime
    if c > 0:
        break

if c == 0:
    print(i, end = "  ")
    counter = counter + 1
    if counter >= nPrimes: #if it reaches the number input, the loop will end.
        break

Этот поворот повышает эффективность вашей программы, потому что вы избегаете ненужного и бессмысленного объема работы.


Чтобы предотвратить потенциальный бесконечный цикл, являющийся результатом выражения while, Вы должны заменить while True: на while counter < nPrimes:. И код выглядит так:

#if it reaches the number input, the loop will end.
while counter < nPrimes:
    c = 0 #another initialization

    # Start from 2 instead of 1
    # and end at `i - 1` instead of `i`
    for x in range (2, i):
        a = i % x # "a" is a new variable that got introduced.
        if a == 0:
            c = c + 1

        # Abandon the loop
        # because an integer with factors other than 1 and itself
        # is unevitably a composite number, not a prime
        if c > 0:
            break

    if c == 0:
        print(i, end = "  ")
        counter = counter + 1

    i = i + 1

Если вы хотите узнать больше о том, как повысить эффективность вашей программы при поиске простых чисел, прочитайте этот код на языке C . : P

0 голосов
/ 05 сентября 2018

c в этом случае используется для подсчета количества чисел, которые делятся равномерно на i.

например, если i = 8: 8 делится на 1, 2, 4 и 8. поэтому c = 4, поскольку есть 4 вещи, которые делятся на него равномерно

если i = 5: 5 делится на 1 и 5. так что c = 2, поскольку есть 2 числа, которые делятся на него равномерно

, если i = 4 (где вы, кажется, запутались): 4 делится на 1, 2 и 4. поэтому c = 3, а не 2.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...