Разработка программы по нахождению простых чисел методом «Решето Эратосфена» на С++.
Простое число – это целое число, которое делится без остатка только на 1 и на самого себя.
Решето Эратосфена – метод нахождения простых чисел в массиве.
Сначала создается массив, все элементы которого равны 0 (можно и 1, но в с++ проще инициализировать 0, иначе нужно делать дополнительный цикл установки начальных значений). В дальнейшем, простые числа будут равны 0, а остальные – 1.
В цикле перебираются элементы массива, начиная с индекса 2 (1 и так простое число). Если элемент равен 0, то в следующем цикле обрабатывается оставшаяся часть массива. Если индекс обрабатываемого элемента кратен индексу с нулевым значением, то он делается равным 1. То есть, если элемент с индексом 3 равен 0, то делаем 1 элементы с индексами 6, 9, и так далее.
После окончания цикла в массиве все простые числа будут равны 0. Их индексы можно вывести на экран.
Текст программы
Простое число – это целое число, которое делится без остатка только на 1 и на самого себя.
Решето Эратосфена – метод нахождения простых чисел в массиве.
Сначала создается массив, все элементы которого равны 0 (можно и 1, но в с++ проще инициализировать 0, иначе нужно делать дополнительный цикл установки начальных значений). В дальнейшем, простые числа будут равны 0, а остальные – 1.
В цикле перебираются элементы массива, начиная с индекса 2 (1 и так простое число). Если элемент равен 0, то в следующем цикле обрабатывается оставшаяся часть массива. Если индекс обрабатываемого элемента кратен индексу с нулевым значением, то он делается равным 1. То есть, если элемент с индексом 3 равен 0, то делаем 1 элементы с индексами 6, 9, и так далее.
После окончания цикла в массиве все простые числа будут равны 0. Их индексы можно вывести на экран.
Текст программы
#include <iostream>Результат:
using namespace std;
int main()
{
//размер массива
const int a = 1000;
//массив целых чисел, равных 0
int ar[a] = {0};
int i, j;
for(i=2; i<a; i++)
{
//если элемент равен 0
if(ar[i]==0)
{
//перебираем элементы с кратными индексами
for(j=i+i; j < a; j += i)
{
ar[j]=1; //делаем равными 1
}
}
}
j=0;
//вывод целых числе на экран по 20 чисел в строке
for(i=1; i<a; i++)
{
//если элемент равен 0, то выводим его индекс на экран
if(ar[i] == 0)
{
cout<<i<<'\t';
j++;
if(j == 20) cout<<endl; //переход на другую строку
}
}
cout<<endl;
cin.get();
return 0;
}
