Страницы

пятница, 2 октября 2015 г.

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

Разработка программы по нахождению простых чисел методом «Решето Эратосфена» на С++.
Простое число – это целое число, которое делится без остатка только на 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;
}
Результат: