Из Википедии мы знаем:
Простое число (или простое число) - это натуральное число, большее 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