Простые числа. Решето Эратосфена: различия между версиями

Материал из Олимпиадное программирование в УлГТУ
Перейти к навигации Перейти к поиску
Нет описания правки
Нет описания правки
Строка 1: Строка 1:
O(NloglogN)
const int N = 1000010;
static bool p[N];
for (int i = 2; i < N; i++)
    if (!p[i] && 1LL * i * i < N)
        for (int j = i * i; j < N; j += i)
            p[j] = 1;
O(N)
const int N = 1000010;
vector<int> primes;
static int minDivisor[N];
for (int i = 2; i < N; i++) {
    if (!minDivisor[i]) {
        minDivisor[i] = i;
        primes.push_back(i);
    }
    for (int j = 0; j < primes.size() && primes[j] <= minDivisor[i] && 1LL * i * primes[j] < N; j++)
        minDivisor[i * primes[j]] = primes[j];
}
== Ссылки на задачи ==
== Ссылки на задачи ==
* [http://acmp.ru/?main=task&id_task=200 ACMP #200 &mdash; Марсианские факториалы]
* [http://acmp.ru/?main=task&id_task=200 ACMP #200 &mdash; Марсианские факториалы]


== Ссылки ==
== Ссылки ==
* [http://e-maxx.ru/algo/eratosthenes_sieve e-maxx.ru &mdash; Решето Эратосфена]
* [http://e-maxx.ru/algo/eratosthenes_sieve E-Maxx — Решето Эратосфена]
* [http://brestprog.neocities.org/lections/factorization.html brestprog.neocities.org &mdash; Разложение числа на простые множители (факторизация). Делители числа]
* [http://e-maxx.ru/algo/prime_sieve_linear E-Maxx — Решето Эратосфена с линейным временем работы]
* [http://brestprog.neocities.org/lections/primesieve.html brestprog.neocities.org &mdash; Решето Эратосфена]
* [http://brestprog.by/topics/factorization Brestprog &mdash; Разложение числа на простые множители (факторизация). Делители числа]
* [http://brestprog.by/topics/primesieve Brestprog &mdash; Решето Эратосфена]
* [http://informatics.mccme.ru/course/view.php?id=17 informatics.mccme.ru &mdash; Курс &laquo;Арифметика и числовые алгоритмы&raquo; &mdash; часть 1]
* [http://informatics.mccme.ru/course/view.php?id=17 informatics.mccme.ru &mdash; Курс &laquo;Арифметика и числовые алгоритмы&raquo; &mdash; часть 1]
* [http://github.com/indy256/codelibrary/blob/master/java/src/PrimesAndDivisors.java CodeLibrary &mdash; Prime numbers, sieve of Eratosthenes, Euler's totient function]
* [http://github.com/indy256/codelibrary/blob/master/java/src/PrimesAndDivisors.java CodeLibrary &mdash; Prime numbers, sieve of Eratosthenes, Euler's totient function]


[[Category:Арифметические алгоритмы]]
[[Category:Арифметические алгоритмы]]

Версия от 13:37, 26 апреля 2019

O(NloglogN)

const int N = 1000010;
static bool p[N];

for (int i = 2; i < N; i++)
    if (!p[i] && 1LL * i * i < N)
        for (int j = i * i; j < N; j += i)
            p[j] = 1;

O(N)

const int N = 1000010;
vector<int> primes;
static int minDivisor[N];

for (int i = 2; i < N; i++) {
    if (!minDivisor[i]) {
        minDivisor[i] = i;
        primes.push_back(i);
    }
    for (int j = 0; j < primes.size() && primes[j] <= minDivisor[i] && 1LL * i * primes[j] < N; j++)
        minDivisor[i * primes[j]] = primes[j];
}

Ссылки на задачи

Ссылки