Решето только по нечётным числам
Решето Эратосфена Решето Эратосфена — это алгоритм, позволяющий найти все простые числа в отрезке Идея проста — запишем ряд чисел Реализация Сразу приведём реализацию алгоритма: int n;vector<char> prime (n+1, true);prime[0] = prime[1] = false;for (int i=2; i<=n; ++i) if (prime[i]) if (i * 1ll * i <= n) for (int j=i*i; j<=n; j+=i) prime[j] = false;Этот код сначала помечает все числа, кроме нуля и единицы, как простые, а затем начинает процесс отсеивания составных чисел. Для этого мы перебираем в цикле все числа от При этом мы начинаем идти от При такой реализации алгоритм потребляет Асимптотика Докажем, что асимптотика алгоритма равна Итак, для каждого простого
Вспомним здесь два известных факта: что число простых, меньше либо равных
Здесь мы выделили первое простое из суммы, поскольку при
Теперь оценим такую сумму с помощью интеграла от той же функции по
Первообразная для подынтегральной функции есть
Теперь, возвращаясь к первоначальной сумме, получаем её приближённую оценку:
что и требовалось доказать. Более строгое доказательство (и дающее более точную оценку с точностью до константных множителей) можно найти в книге Hardy и Wright "An Introduction to the Theory of Numbers" (стр. 349). Различные оптимизации решета Эратосфена Самый большой недостаток алгоритма — то, что он "гуляет" по памяти, постоянно выходя за пределы кэш-памяти, из-за чего константа, скрытая в Кроме того, для достаточно больших Ниже рассмотрены методы, позволяющие как уменьшить число выполняемых операций, так и значительно сократить потребление памяти. Просеивание простыми до корня Самый очевидный момент — что для того, чтобы найти все простые до Таким образом, изменится внешний цикл алгоритма (укажите, как именно) На асимптотику такая оптимизация не влияет (действительно, повторив приведённое выше доказательство, мы получим оценку Решето только по нечётным числам Поскольку все чётные числа, кроме Во-первых, это позволит вдвое сократить объём требуемой памяти. Во-вторых, это уменьшит число делаемых алгоритмом операций примерно вдвое.
Воспользуйтесь поиском по сайту: ![]() ©2015 - 2025 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|