Интернет магазин китайских планшетных компьютеров



Компьютеры - Решето Аткина

23 января 2011


Оглавление:
1. Решето Аткина
2. Объяснение
3. Оценка сложности



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

Упрощённая версия алгоритма

Ниже представлена упрощённая версия кода на языке программирования Си, иллюстрирующая основную идею алгоритма — использование квадратичных форм.

int limit = 1000;
int sqr_lim;
bool is_prime;
int x2, y2;
int i, j;
int n;
 
// Инициализация решета
sqr_lim = sqrtlimit);
for  is_prime = false;
is_prime = true;
is_prime = true;
 
// Предположительно простые - это целые с нечетным числом
// представлений в данных квадратных формах.
// x2 и y2 - это квадраты i и j.
x2 = 0;
for  {
    x2 += 2 * i - 1;
    y2 = 0;
    for  {
        y2 += 2 * j - 1;
 
        n = 4 * x2 + y2;
        if  && )
            is_prime = !is_prime;
 
        // n = 3 * x2 + y2; 
        n -= x2; // Оптимизация
        if  && )
            is_prime = !is_prime;
 
        // n = 3 * x2 - y2;
        n -= 2 * y2; // Оптимизация
        if  &&  && )
            is_prime = !is_prime;
    }
}
 
// Отсеиваем кратные квадратам простых чисел в интервале.
//
for  {
    if  {
        n = i * i;
        for  {
            is_prime = false;
        }
    }
}
 
// Вывод списка простых чисел в консоль.
printf; 
for  {  // добавлена проверка делимости на 3 и 5. В оригинальной версии алгоритма потребности в ней нет.
    if  &&  && ){
       printf;
    }
}


Просмотров: 5418


<<< Признаки делимости
Решето Сундарама >>>