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


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




[236]

Положительно определённые симметрические матрицы и метод наименьших квадратов717 33. Теоретико-числовые алгоритмы


Те ope тико-числовые алгоритмы

Когда-то теория чисел была классическим примером красивой, но совершенно бесполезной области чистой математики. Сейчас теоретико-числовые алгоритмы широко используются - прежде всего в различных криптографических схемах, где нужны большие простые числа. В этой главе мы основные факты и алгоритмы, используемые в такого рода приложениях.

Раздел 33.1 посвящен основам теории чисел (делимость, сравнения по модулю, теорема об единственности разложения на простые множители). В разделе 33.2 рассматривается один из самых древних алгоритмов - алгоритм Евклида поиска наибольшего общего делителя двух целых чисел. В разделе 33.3 мы напоминаем основные факты арифметики в кольцах вычетов. В разделе 33.4 мы изучим остатки, даваемые кратными данного числа а по данному модулю п, и научимся решать уравнение ах = Ь (mod п) при помощи алгоритма Евклида. Раздел 33.5 посвящен «китайской теореме об остатках». В разделе 33.6 рассматриваются остатки от деления степеней данного числа а по фиксированному модулю; излагается алгоритм вычисления аъ mod п при помощи многократного возведения в квадрат. (Этот алгоритм играет важнейшую роль при проверке простоты чисел.) В разделе 33.7 описывается одна из так называемых криптосистем с открытым ключом - система RSA. Раздел 33.8 содержит вероятностный алгоритм проверки чисел на простоту (с его помощью ищут большие простые числа, используемые для генерации ключей в системе RSA). Наконец, в разделе 33.9 мы приведём достаточно эффективный эвристический алгоритм, помогающий разлагать на множители небольшие целые числа. Отметить, что именно отсутствие (на сегодняшний день) эффективного алгоритма разложения чисел на множители позволяет использовать систему RSA; если такой алгоритм найдётся, вся эта система рухнет в одночасье. (Так что отсутствие алгоритма может быть полезнее его существования!) Арифметические операции с длинными числами Работая с большими целыми числами, мы должны договориться, что считать размером входных данных той или иной задачи, а


также условиться относительно стоимости элементарных арифметических операций.

В этой главе под «большим входом» (входом большого размера) мы будем понимать вход, содержащий большие числа (а не вход, содержащий много чисел - как, скажем, в задаче сортировки). Поэтому размер входа мы будем измерять количеством битов, использованных для записи чисел. Алгоритм, получающий на вход целые числа а\, а2, ,ак, называется полиномиальным (polinomial-time algorithm), если время его работы ограничено многочленом от lg а\, lg а2, , lg ttfcj то есть многочленом от длин исходных данных (в двоичной системе счисления).

До сих пор мы обычно считали, что арифметические действия (умножение, деление, вычисление остатка) выполняются за единицу времени. Это было разумно, пока не использовались большие числа, но теперь такой подход перестаёт быть адекватным. Выполнение арифметических операций само становится достаточно трудоёмким. Поэтому число операций теоретико-числового алгоритма естественнее измерять в битовых операциях (bit operations). Например, простейший метод умножения двух /3-битовых целых чисел требует 0(/32) битовых операций. Аналогичным образом деление /3-битового числа на более короткое или вычисление остатка от деления /3-битового числа на более короткое (стандартными методами) требуют 0(/32) битовых операций (см. упр. 33.1-11.)

Как правило, простейшие алгоритмы не являются оптимальными. Например, несложный алгоритм, использующий метод "разделяй и властвуй", умножает два /3-битовых целых числа, делая 0(/31&3) (битовых) операций, а самый быстрый из известных на сегодняшний день алгоритмов требует 0(/3 lg /3 lg lg /3) операций. На практике обычно применяют простейшие алгоритмы, поэтому в наших расчётах мы будем исходить из оценки оценку 0(/32) для умножения и деления.

В этой главе мы будем обращать внимание и на число арифметических, и на число битовых операций.

33.1. Начальные сведения из теории чисел

В этом разделе мы напомним некоторые свойства множеств целых чисел (Z = {...,-2,-1,0,1,2,...}) и натуральных чисел (N={0,1,2,...}).

Делимость и делители.

Говорят, что d делит a (d divides а, запись d \ а), если а = kd при некотором целом к. Синонимы: «d является делителем а» (d is a divisor of а), «а делится на d». «а кратно d» (a is a multiple of d). Число 0 кратно любому числу. Если а > 0 и d \ а, то \d\ \а\. Если



[стр.Начало] [стр.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]