Ремонт принтеров, сканнеров, факсов и остальной офисной техники


назад Оглавление вперед




[246]

с высокой вероятностью достаточно быстро расшифровать любое сообщение.

В этом разделе мы обсуждаем вопрос о том, как искать большие простые числа.

Распределение простых чисел.

Как найти большое простое число? Естественный подход таков: взять большое случайное число и посмотреть, не окажется ли оно простым. Если нет, попробовать другое случайное число и так далее. Этот способ пригоден, лишь если простые числа не слишком редки - к счастью, это действительно так, как показывает теорема о распределении простых чисел, доказанная в конце прошлого века. Вот её формулировка (доказательство далеко выходит за рамки этой книги).

Определим функцию распределения простых чисел (prime distribution function) 7Г, положив 7г(п) равным количеству простых чисел, не превосходящих п. Например, на отрезке от 1 до 10 есть 4 простых числа 2, 3, 5 и 7, поэтому 7г(10) = 4.

Теорема 33.37 (асимптотический закон распределения простых чисел)

Выражение га/In га даёт неплохое приближение к 7г(га) даже при небольших значениях га. Уже при га = 109 (небольшое число с точки зрения специалистов по теории чисел) погрешность приближения не превосходит 6% (тг(109) = 50 847 478, 109/109 In 109 и 48 254 942).

Асимптотический закон позволяет оценить вероятность, с которой целое число, наугад выбранное из отрезка от 1 до га, является простым - это примерно 1/ In гг. Тем самым для отыскания простого числа от 1 до га нужно проверить на простоту порядка In га случайно выбранных чисел. Например, чтобы найти простое число из 100 десятичных знаков, надо перебрать пордяка In 10100 ~ 230 случайных чисел от 1 до 10100. (Эта оценка по очевидным причинам может быть уменьшена вдвое: проверять на простоту стоит только нечётные числа. Заметим также, что число десятичных знаков в наугад взятом числе от 1 до 10100 с большой вероятностью близко к 100 - около 90% всех чисел в этом диапазоне имеют 100 знаков, около 99% - 99 или более знаков, около 99, 9% - 98 или более знаков и т.д.)

Нам остаётся объяснить, каким образом можно проверить, будет ли простым данное большое число га. Другими словами, мы хотим

33.8. Проверка чисел на простоту

= 1.

п-»оо га/ In га


узнать, состоит ли разложение числа га на простые множители

ei еоег

п = Plp22 -р/,

(г 1; числа pi,p2,... ,рг - различные простые делители га) из единственного простого числа (г = 1, в\ = 1).

Самый простой способ проверки - перебор делителей (trial division). Будем пытаться разделить га на 2, 3,... , [\/п\ (чётные числа, большие 2, можно пропускать). Если га не делится ни на одно из этих чисел, то оно простое (если га разлагается в произведение двух или более множителей, то один из множителей не превосходит \/п). Но дело это долгое - уже число делений есть Q(\/n), и время работы экспоненциально зависит от длины записи числа га (напомним, что двоичное представление га занимает fi = [lg(ra+ 1)J битов, так что \/п = 0(2/2)). Таким образом, такой подход применим, лишь есть число га мало, или имеет небольшой делитель.

Если при переборе делителей мы обнаруживаем, что число га составное, то одновременно находится и делитель числа га. Для других способов проверки простоты это не так - можно убедиться, что число составное, так и не указав никакого его делителя. Это не удивительно, так как задача разложения числа на множители, по-видимому, гораздо сложнее задачи проверки простоты числа. К задаче разложения на множители мы вернёмся в следующем разделе.

Псевдопростые числа.

Сейчас мы опишем «почти правильный» алгоритм проверки числа на простоту, приемлемый для многих практических приложений. (Небольшое усложнение этого алгоритма, делающее его совсем правильным, будет описано дальше.)

Обозначим через Z + множество всех ненулевых вычетов по модулю га:

Z+ = {l,2,...,ra-l}.

Если число га простое, то Z + = Z*.

Назовём число га псевдопростым по основанию a (base-a pseudo-prime), если выполнено утверждение малой теоремы Ферма:

an~l = 1 (mod га).(33.42)

Любое простое число га является псевдопростым по любому основанию a G Z+. Поэтому если нам удалось найти основание а, по которому га не является псевдопростым, то мы можем быть уверены, что га - составное. Оказывается, что во многих случаях достаточно проверить основание а = 2

Pseudoprime(п)

1if Modular-Exponentiation(2,n-l,n) \not\equiv 1 \pmod n

2then return composite(заведомо)

3else return prime(возможно)


Эта процедура может совершать ошибки, но только в одну сторону: если она сообщает, что число п составное, то это действительно так, но она может принять составное число за простое (если оно является псевдопростым по основанию 2). Как часто такое происходит? Оказывается, не так уж часто - среди чисел до 10 000 есть только 22 числа, для которых процедура Pseudoprime даёт неверный ответ (первые четыре из них - 341, 561, 645 и 1105). Можно показать, что доля таких «плохих» чисел среди /3-значных чисел стремится к 0 при fi -> оо. Используя оценки из работы Померанца [157], можно показать, что доля составных чисел среди 50-разрядных псевдопростых по основанию 2 чисел не превосходит 10 6, а среди 100-разрядных псевдопростых чисел - Ю-13.

Нет никаких причин ограничиваться проверкой лишь основания 2; можно проверять соотношение (33.42) и при других а. Но это не всегда помогает: существуют составные числа п, которые являются псевдопростыми по любому основанию а £ Z*. Такие числа называются числами Кармайкла (Carmichael numbers). Три первых числа Кармайкла таковы: 561, 1105 и 1729. Числа Кармайкла редки: среди первых ста миллионов положительных чисел их имеется всего 255. (В упр. 33.8-2 мы укажем одну из причин, по которым таких чисел мало.)

Сейчас мы исправим наш тест так, чтобы даже числа Кармайкла не смогли ввести его в заблуждение.

Вероятностный тест Миллера - Рабина

Этот вероятностный алгоритм проверки простоты числа получается из процедуры Pseudoprime двумя принципиальными усовершенствованиями.

•Тест Миллера - Рабина проверяет соотношение (33.42) для нескольких значений а.

•Вычисляя степень а, фигурирующую в сравнении (33.42), тест по ходу вычисления проверят, не обнаружился ли нетривиальный корень из 1 по модулю п. Если да, тест немедленно прекращает работу и сообщает, что число п - составное (следствие 33.35).

Процедура Miller-Rabin, приведённая ниже, ниже, получает на вход нечётное число п > 2 (простоту которого мы хотим проверить) и и целое положительное число s, определяющее, сколько итераций надо провести (чем больше s, тем меньше вероятность ошибки). Тест использует генератор случайных чисел Random (см. раздел 8.3); процедура Random(1,ti - 1) возвращает случайное целое число а, равномерно распределённое на отрезке 1 а п - 1.

Тест использует процедуру Witness: Witness(<2, п) истинно, если а является «свидетелем» того, что число п составное.

Witness(а,п)

1 пусть \langle b k,b {k-l},\ldots,b 0$ --- двоичная запись $п-1$



[стр.Начало] [стр.1] [стр.2] [стр.3] [стр.4] [стр.5] [стр.6] [стр.7] [стр.8] [стр.9] [стр.10] [стр.11] [стр.12] [стр.13] [стр.14] [стр.15] [стр.16] [стр.17] [стр.18] [стр.19] [стр.20] [стр.21] [стр.22] [стр.23] [стр.24] [стр.25] [стр.26] [стр.27] [стр.28] [стр.29] [стр.30] [стр.31] [стр.32] [стр.33] [стр.34] [стр.35] [стр.36] [стр.37] [стр.38] [стр.39] [стр.40] [стр.41] [стр.42] [стр.43] [стр.44] [стр.45] [стр.46] [стр.47] [стр.48] [стр.49] [стр.50] [стр.51] [стр.52] [стр.53] [стр.54] [стр.55] [стр.56] [стр.57] [стр.58] [стр.59] [стр.60] [стр.61] [стр.62] [стр.63] [стр.64] [стр.65] [стр.66] [стр.67] [стр.68] [стр.69] [стр.70] [стр.71] [стр.72] [стр.73] [стр.74] [стр.75] [стр.76] [стр.77] [стр.78] [стр.79] [стр.80] [стр.81] [стр.82] [стр.83] [стр.84] [стр.85] [стр.86] [стр.87] [стр.88] [стр.89] [стр.90] [стр.91] [стр.92] [стр.93] [стр.94] [стр.95] [стр.96] [стр.97] [стр.98] [стр.99] [стр.100] [стр.101] [стр.102] [стр.103] [стр.104] [стр.105] [стр.106] [стр.107] [стр.108] [стр.109] [стр.110] [стр.111] [стр.112] [стр.113] [стр.114] [стр.115] [стр.116] [стр.117] [стр.118] [стр.119] [стр.120] [стр.121] [стр.122] [стр.123] [стр.124] [стр.125] [стр.126] [стр.127] [стр.128] [стр.129] [стр.130] [стр.131] [стр.132] [стр.133] [стр.134] [стр.135] [стр.136] [стр.137] [стр.138] [стр.139] [стр.140] [стр.141] [стр.142] [стр.143] [стр.144] [стр.145] [стр.146] [стр.147] [стр.148] [стр.149] [стр.150] [стр.151] [стр.152] [стр.153] [стр.154] [стр.155] [стр.156] [стр.157] [стр.158] [стр.159] [стр.160] [стр.161] [стр.162] [стр.163] [стр.164] [стр.165] [стр.166] [стр.167] [стр.168] [стр.169] [стр.170] [стр.171] [стр.172] [стр.173] [стр.174] [стр.175] [стр.176] [стр.177] [стр.178] [стр.179] [стр.180] [стр.181] [стр.182] [стр.183] [стр.184] [стр.185] [стр.186] [стр.187] [стр.188] [стр.189] [стр.190] [стр.191] [стр.192] [стр.193] [стр.194] [стр.195] [стр.196] [стр.197] [стр.198] [стр.199] [стр.200] [стр.201] [стр.202] [стр.203] [стр.204] [стр.205] [стр.206] [стр.207] [стр.208] [стр.209] [стр.210] [стр.211] [стр.212] [стр.213] [стр.214] [стр.215] [стр.216] [стр.217] [стр.218] [стр.219] [стр.220] [стр.221] [стр.222] [стр.223] [стр.224] [стр.225] [стр.226] [стр.227] [стр.228] [стр.229] [стр.230] [стр.231] [стр.232] [стр.233] [стр.234] [стр.235] [стр.236] [стр.237] [стр.238] [стр.239] [стр.240] [стр.241] [стр.242] [стр.243] [стр.244] [стр.245] [стр.246] [стр.247] [стр.248] [стр.249] [стр.250] [стр.251] [стр.252] [стр.253] [стр.254] [стр.255] [стр.256] [стр.257] [стр.258] [стр.259] [стр.260] [стр.261] [стр.262] [стр.263] [стр.264] [стр.265] [стр.266] [стр.267] [стр.268] [стр.269] [стр.270] [стр.271] [стр.272] [стр.273] [стр.274] [стр.275] [стр.276] [стр.277] [стр.278] [стр.279] [стр.280] [стр.281] [стр.282] [стр.283] [стр.284] [стр.285] [стр.286] [стр.287] [стр.288] [стр.289] [стр.290] [стр.291] [стр.292] [стр.293] [стр.294]