Алгоритм решето эратосфена python

Решето Эратосфена

В 235 году до н.э. греческий ученый Эратосфен изобрел следующий способ нахождения простых чисел на промежутке от 1 до заданного N:

1. Выписать все целые числа 2. N.

2. Зачеркнуть все числа, кратные i = 2 — первому простому числу.

3. Найти первое незачёркнутое число в списке, большее чем i, и присвоить значению переменной i это число.

4. Повторять шаги 2 и 3, пока это возможно.

После завершения алгоритма незачеркнутыми останутся все простые числа, меньшие либо равные N.

Напишите функцию eratosthenes(N), воспроизводящую данный алгоритм. Ваша функция должна через пробел печатать числа в том порядке, в котором их вычеркивает из списка оригинальный алгоритм. Например, если N = 10, то числа будут вычеркиваться в таком порядке: 4 6 8 10 9.

Если для какого-то параметра никакие числа не вычеркиваются, просто не выводите ничего.

Пример
Ввод
eratosthenes(15)
Вывод
4 6 8 10 12 14 9 15

Решето Эратосфена
n = int(input()) a = * n a = a = False for k in range(2, n): if a: for m in (k +.

Решето Эратосфена
Как реализовать алгоритм "Решето Эратосфена" для поиска простых чисел не больших N ? Ввод: 23.

Решето Эратосфена
**Предисловие** *Для нахождения всех простых чисел не больше заданного числа n, следуя методу.

Решето Эратосфена
нужна помощь в написание программы Решето Эратосфена,а именно нужно написать программу, которая.

Решето Эратосфена
Решето Эратосфена — алгоритм нахождения всех простых чисел до некоторого целого числа n, который.

Лучший ответ

Сообщение было отмечено mik-a-el как решение

Решение

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
def eratosthenes(n): a = [] b = [] if n  4: return for i in range(2,n+1,1): a.append(i) while a: for i in a[1:]: if i % a[0] == 0: b.append(i) a.remove(i) a = a[1:] for i in b: print(i,end=" ") eratosthenes(15)

Эксперт Python

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
n = int(input("вывод простых чисел до числа . ")) a = [0] * n # создание массива с n количеством элементов for i in range(n): # заполнение массива . a[i] = i # значениями от 0 до n-1 # вторым элементом является единица, которую не считают простым числом # забиваем ее нулем. a[1] = 0 m = 2 # замена на 0 начинается с 3-го элемента (первые два уже нули) while m  n: # перебор всех элементов до заданного числа if a[m] != 0: # если он не равен нулю, то j = m * 2 # увеличить в два раза (текущий элемент простое число) while j  n: a[j] = 0 # заменить на 0 j = j + m # перейти в позицию на m больше m += 1 # вывод простых чисел на экран (может быть реализован как угодно) b = [] for i in a: if a[i] != 0: b.append(a[i]) del a print(b)

Лучший ответ

Сообщение было отмечено mik-a-el как решение

Решение

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
def eratosthenes(n): # Среди чисел, меньших 4, не будет вычеркнутых. if n  4: return # Создание и заполнение списка чисел из интервала [0; n]. a = [i for i in range(n + 1)] # Число 1 не является простым числом. # Все числа, не являющиеся простыми, будем вычеркивать (заменять нулём). a[1] = 0 # Список вычеркнутых чисел пока пуст. b = [] # Перебор всех чисел от 2 до n. for i in range(2, n + 1): # Перебрать все кратные ему числа for j in range(i * 2, n + 1, i): # Если число еще не вычеркнуто. if a[j] != 0: # Вычеркнуть это число. a[j] = 0 # Поместить в список вычеркнутых. b.append(j) # Вывести составные числа в порядке их вычеркивания. print(" ".join(str(x) for x in b)) eratosthenes(int(input('Максимальное число n = ')))

Лучший ответ

Сообщение было отмечено mik-a-el как решение

Решение

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
def eratosthenes(N): a = [i for i in range(1, N+1)] #тут будут простые числа b = [] #тут будут вычеркнутые num=2 #простое число которое будет проверяться, то есть 2, 3, 5. i=0 #для подсчёта(счётчик) a.remove(1) #еденица - не простое число while num  a[-1]: #цикл, пока num меньше последнего числа в списке a while len(a) > i: #цикл, пока длина a больше i, то естьэто цикл, который проходит по списку в поисках чисел кратных num и удаляет их if a[i]%num == 0 and a[i]!= num: #если остаток от числа в списке на позиции i равен нулю - заносим в список удалённых(b), удаляем из a b.append(a[i]) #заносим a.pop(i) #удаляем i+=1 #проверяем следущую позицию списка i=0 #сбрасываем счётчик #следущее число num for j in range(len(a)): if a[j] > num: num = a[j] break return b #print(eratosthenes(int(input())))

Источник

Решето Эратосфена — алгоритм определения простых чисел

Решето Эратосфена – это алгоритм нахождения простых чисел до заданного натурального числа путем постепенного отсеивания составных чисел. Образно говоря, через решето Эратосфена в процессе его тряски проскакивают составные числа, а простые остаются в решете.

Чтобы понять данный алгоритм, вспомним, что числа являются простыми, если делятся только на единицу и самих себя. Первое простое число — это 2, второе простое число — это 3. Теперь начнем рассуждать:

  1. Все четные числа, кроме двойки, — составные, т. е. не являются простыми, так как делятся не только на себя и единицу, а также еще на 2.
  2. Все числа кратные трем, кроме самой тройки, — составные, так как делятся не только на самих себя и единицу, а также еще на 3.
  3. Число 4 уже выбыло из игры, так как делится на 2.
  4. Число 5 простое, так как его не делит ни один простой делитель, стоящий до него.
  5. Если число не делится ни на одно простое число, стоящее до него, значит оно не будет делиться ни на одно сложное число, стоящее до него.

Последний пункт вытекает из того, что сложные числа всегда можно представить как произведение простых. Поэтому если одно сложное число делится на другое сложное, то первое должно делиться на делители второго. Например, 12 делится на 6, делителями которого являются 2 и 3. Число 12 делится и на 2, и на 3.

Алгоритм Эратосфена как раз заключается в последовательной проверке делимости чисел на предстоящие простые числа. Сначала берется первое простое и из ряда натуральных чисел высеиваются все кратные ему. Затем берется следующее простое и отсеиваются все кратные ему и так далее.

При реализации алгоритма Эратосфена на языке программирования есть некоторая сложность. Допустим, мы помещаем натуральные числа до заданного числа N в массив. Далее в процессе выполнения алгоритма будем заменять обнаруженные сложные числа нулями. После выполнения алгоритма те ячейки массива, которые не содержат нули, содержат простые числа, которые выводятся на экран.

Однако индексация массива начинается с нуля, а простые числа начинаются с двойки. Эта проблема решаема, но добавляет сложности в код. Поскольку алгоритм Эратосфена не такой уж простой, легче пренебречь началом и взять массив от 0 до N . Здесь важнее индексы, чем значения элементов. Значениями могут быть логические True , обозначающее простое число, и False , обозначающее сложное число.

В данном примере реализации алгоритма Эратосфена на языке программирования Python список заполняется числами от 0 до N включительно так, что индексы элементов совпадают с их значениями. Далее все непростые числа заменяются нулями:

N = int(input()) # Создается список из значений от 0 до N включительно primes = [i for i in range(N + 1)] # Вторым элементом списка является единица, которую # не считают простым числом. Забиваем ее нулем primes[1] = 0 # Начинаем с 3-го элемента i = 2 while i  N: # Если значение текущей ячейки до этого не было обнулено, # значит в этой ячейке содержится простое число if primes[i] != 0: # Первое кратное ему будет в два раза больше j = i + i while j  N: # и это число составное, # поэтому заменяем его нулем primes[j] = 0 # переходим к следующему числу, # которое кратно i (оно на i больше) j = j + i i += 1 # Избавляемся от всех нулей в списке primes = [i for i in primes if i != 0] print(primes) 
35 [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31]

Источник

Решето Эратосфена

Данная программа должна вывести все простые числа в заданном диапазоне (от 0 до n ) при помощи алгоритма «Решето Эратосфена».

Решение задачи

  1. Принимаем значение определяющее верхнюю границу диапазона и записываем его в переменную n .
  2. Инициализируем переменную sieve («решето») множеством чисел от 2 до n .
  3. Используем цикл while , который прекратит свою работу, когда множество sieve станет пустым.
  4. Примем во внимание тот факт, что минимальное число в этом множестве (на первой итерации это будет 2) всегда простое.
  5. Выводим это число на экран.
  6. Далее удаляем это число вместе со всеми числами, кратными ему (в заданном диапазоне).
  7. Продолжаем это делать, пока множество sieve не станет пустым.
  8. Конец

Исходный код

Ниже дан исходный код для вывода всех простых чисел из заданного диапазона при помощи алгоритма под названием «решето Эратосфена». Результаты работы программы также даны ниже.

n = int(input("Введите верхнюю границу диапазона: ")) sieve = set(range(2, n+1)) while sieve: prime = min(sieve) print(prime, end = "\t") sieve -= set(range(prime, n+1, prime))

Объяснение работы программы

  1. Пользователь вводит верхнюю границу диапазона, и она записывается в переменную n .
  2. Инициализируем переменную sieve множеством всех чисел в диапазоне от 2 до n . Тип «множество» задается функцией set , а все числа диапазона определяются при помощи функции range .
  3. Цикл while будет работать, пока множество sieve не станет пустым.
  4. Переменная prime инициализируется минимальным значением из множества sieve . Обращаем внимание, что это всегда будет простое число. И это простое число выводится на экран.
  5. Затем это число и все числа, кратные ему, удаляются из множества sieve .
  6. Пункты 4 и 5 повторяются до тех пор, пока множество sieve не станет пустым, то есть количество элементов в нем станет равно 0.

Результаты работы программы

Пример 1: Введите верхнюю границу диапазона: 10 2 3 5 7 Пример 2: Введите верхнюю границу диапазона: 15 2 3 5 7 11 13

Источник

Решето Эратосфена в Python

Решето Эратосфена в Python

Статьи

Введение

В ходе статьи используя алгоритм “Решето Эратосфена” найдём все простые числа до заданного числа N в Python.

Решето Эратосфена – это алгоритм нахождения всех простых чисел в диапазоне от 0, до заданного числа N.

Написание кода

Для начала дадим пользователю возможность ввода числа верхней границы диапазона:

Используя генератор заполним список значениями от одного, до заданного числа N:

n = int(input('Введите N: ')) a = [i for i in range(n + 1)]

Так как единица не является простым числом, заменим её на ноль:

n = int(input('Введите N: ')) a = [i for i in range(n + 1)] a[1] = 0

Создадим переменную i равную двум, чтобы начать сразу с третьего элемента:

n = int(input('Введите N: ')) a = [i for i in range(n + 1)] a[1] = 0 i = 2
n = int(input('Введите N: ')) a = [i for i in range(n + 1)] a[1] = 0 i = 2 while i 
n = int(input('Введите N: ')) a = [i for i in range(n + 1)] a[1] = 0 i = 2 while i 

Преобразуем список в множество, после чего удалим все нули и выведем его:

n = int(input('Введите N: ')) a = [i for i in range(n + 1)] a[1] = 0 i = 2 while i

Заключение

В ходе статьи мы с Вами научились использовать алгоритм “Решето Эратосфена” для нахождения всех простых чисел в заданном диапазоне и написали код на Python. Надеюсь Вам понравилась статья, желаю удачи и успехов! 🙂

Источник

Читайте также:  Address тег в html
Оцените статью