Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Основные математические принципы в реализации некоторых алгоритмов информационной безопасности. Учебное пособие

.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
1 Мб
Скачать
☆
Доказательство
s
Докажем теорему методом полной математической индукции.
Предположение индукции: при t = 2 условие теоремы выполняется, так как 2 – простое число.
Допустим, что утверждение теоремы верно
2,tn
, n ≥ 2. Дока-
жем истинность для t = n + 1.
Если n + 1 простое, то для него утверждение теоремы верно.
Если n + 1 составное, тогда a, b, 1 < a < n + 1, 1 < b < n + 1, что n + 1 = a b. По предположению индукции каждое из чисел а, b или простое, или разлагается в произведение простых чисел, т. е. полу­чили разложение n + 1 в произведение простых чисел.
Теперь докажем единственность разложения индукцией по пара­метру s(n), где s(n) − наименьшее значение s по всем разложениям вида (2.5) для числа n. При s(n) = 1 это очевидно. Допустим, что это верно для всех п при s(n) < s и любом фиксированном s > 1, и докажем для п при s(n) = s. Пусть наряду с (2.5) существует представление
,.., ,
,...,
qq
где
1
− простые числа и
t
nq q
1
qq
1
Так как р1|п, то по обобщению свойства б) р1|qi при некотором и тогда по свойству в)
.qp
В силу симметрии имеем также
11
pq
1.i
Отсюда и из неравенства
(2.6)
t
... .
t
qq
1 i
.qp
Следовательно,
11
1,it
получаем:
11
Теперь из (2.5), (2.6), учитывая отсутствие делителей нуля в Z, получаем два представления для числа
/:пр
1
,
.qp
/ ... ,.., .
пр р р qq
12 2
t
По предположению индукции эти разложения совпадают, а потому совпадают и разложения (2.5), (2.6). Теорема полностью доказана.
Пример. Найдем НОД и НОК для чисел 2346, 646.
Второй способ. Используем разложение данных чисел на простые множители:
2346 = 2 1173 =2 3 391 = 2 3 17·23;
646 = 2 323 = 2 17 19;
31
(2346, 646) = 2 17 = 34;
s
s
s
p
s
p
s
s
s
s
s
p
[2346, 646] = 2 3 17 23 19 = 44 574.
Определение. Представление целого числа п в виде
где = ±1,
, , ...,
12

npp p
, , ...,
pp
12
N 
называется каноническим разложением числа п.
s
12
 ,
12
простые числа;
...
pp
12

Следствие теоремы 2.10. Для любого целого числа п ≠ 0 суще-
ствует каноническое разложение, и оно единственно.
Утверждение 2.2. Для любых чисел ,ab, представимых в виде:
и

12
app p
 ,
12
где
,{1,1}, 0, 0,1,
12
ii
...
is     ,

12
bpp p
 ,
12
...
12
pp

,
наибольший
общий делитель и наименьшее общее кратное находятся следующим образом:
ss
min( , ) max( , )

(, ) ,[, ] .
ab p ab p


11

ii
ii ii
ii
В связи с большой ролью, которую играют простые числа в теории делимости и арифметике в целом, множество простых чисел издавна при­влекало к себе внимание математиков. Изучением свойств этого множе­ства занимались такие выдающиеся математики, как Евклид, Ферма, Эй­лер, Лежандр, П.Л. Чебышёв и др.
Особенно много вопросов, связанных с простыми числами, отно­сится к их распределению в натуральном ряду. Непосредственно из имеющихся таблиц усматривается, что простые числа распределены в натуральном ряду весьма неравномерно. Так, например, в первой сотне насчитывается 25 простых чисел, во второй 21, в сорок девятой 8, в пятидесятой 15. Однако, несмотря на неравномерность распределе­ния, наблюдается общая тенденция к постепенному уменьшению ко­личества простых чисел на все более удаленных отрезках натурального ряда одинаковой длины. При удалении по натуральному ряду в сторо­ну возрастания чисел начинают появляться все более длинные проме-
32
жутки, не содержащие простых чисел. В связи с этим можно отметить следующий интересный факт. Каково бы ни было натуральное число п, можно найти п составных чисел, непосредственно следующих друг за другом, например,
(п + 1)! + 2, (п + 1)! + 3, ..., (п + 1)! + (п + 1).
Первое слагаемое делится на 2, второе на 3 и т. д. до последнего
n-го, которое делится на (п + 1). Таким образом, каждое из этих чисел имеет положительный делитель, отличный от единицы и самого себя (составные числа).
В связи с этим естественно возникает вопрос: не является ли множе­ство простых чисел конечным? Отрицательный ответ на этот вопрос дал еще Евклид.
Теорема 2.14 (теорема Евклида). Множество простых чисел бес-
конечно.
Доказательство
Предположим противное, т. е. множество простых чисел конечно и представляет собой ряд следующего вида:
2, 3, 5, ..., р
. (2.7)
k
Рассмотрим число N = 2 3 5 ·...· рk +1. Так как каждое число из (2.7) делит число 2  3  5 ·...· рk, но не делит единицу, то число N не
делится ни на одно из чисел (2.7), т. е. ни на одно простое число. А так как оно больше единицы, то это противоречит теореме 2.13. Получили противоречие, что и требовалось доказать.
Теорема 1.15. Если натуральное число n (n > 1) не делится ни на
одно простое число, не превосходящее n , то оно простое.
Доказательство
Пусть n – составное. Тогда n = a b, где 1 < a < n, 1 < b < n. Оче- видно, что a, b не могут быть одновременно больше n .
Пусть теперь a ≤ n . Так как а > 1. то у а должен существовать, по крайней мере, один простой делитель р. Значит, p|n, где p ≤ a ≤ n ,
это противоречит условию, что и требовалось доказать.
33
Для того чтобы из множества натуральных чисел выделять простые
N
N
N
N
числа, можно взять все натуральные числа до заданной границы и, пользуясь теоремой 2.15, определить для каждого из них, является ли оно простым или составным.
Более удобен способ отсеивания составных чисел, получивший название решета Эратосфена2.
Теорема 2.16 (решето Эратосфена). 1) Если в множестве нату-
ральных чисел 2, 3, 4, …, N зачеркнуть числа, кратные первым r про­стым числам 2, 3, 5,…, pr, то первое (наименьшее) незачеркнутое чис-
ло будет простым.
2) Если вычеркнуть все числа, кратные всем простым числам до , т. е. выбрать r так, что pr ≤
≤ p
, то оставшиеся числа будут
r+1
совпадать с множеством всех простых чисел p, таких, что N < p ≤ N.
Доказательство
1) Каждое составное число n делится, по крайней мере, на одно
простое число, меньшее, чем n. Если число n не делится ни на одно простое число, меньшее, чем n, то оно является простым.
2) Каждое составное число n, такое, что n <
≤ n, делится (тео- рема 2.15), по крайней мере, на одно простое pr ≤ n ≤ N , т. е. на од­но из чисел 2, 3, 5, …,
pNpp
 и, следовательно, будет вы-
rr r
,
1
черкнуто.
Простые числа p >
не делятся на 2, 3, 5, …, pr и не будут вы-
черкнуты.
Алгоритм нахождения простых чисел ≤ N
1. Первое число 2 – простое. Вычеркиваем все числа, кратные 2.
2. Первое невычеркнутое число 3 простое. Вычеркиваем все чис-
ла, кратные 3.
2
Эратосфен (276196 гг. до н. э.) – библиотекарь Александрийской биб-
лиотеки. Занимался исследованием многоугольных чисел. Известен как мате­матик, географ и астроном.
34
3. Первое невычеркнутое число 5 простое, и т. д. продолжаем,
пока не вычеркнем все числа, кратные найденным простым числам 2, 3, 5, …, pr. Все оставшиеся невычеркнутыми числа дадут нам множе-
ство простых чисел, лежащих между N и N (включая N, если оно простое), а вместе с ранее найденными 2, 3, 5,…, pr мы получаем все
простые числа, не превосходящие N.
Пример. N = 20.
2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20.
Обозначим через π(х) число простых чисел, не превосходящих х.
Тогда теорему 2.14 можно записать в следующем виде:
если х → ∞, то π(х) → ∞.
Теорема Евклида была обобщена немецким математиком
П.Г.Л. Дирихле (18051859 гг.), который доказал, что любая арифме­тическая прогрессия, первый член и разность которой взаимно просты, содержит бесконечное множество простых чисел.
Ни теорема Евклида, ни теорема Дирихле ничего не говорят о по­рядке роста функции π(х). Некоторое представление об этом дает сле­дующая теорема, сформулированная впервые Эйлером:
если х → ∞, то π(х)/x → 0.
Таким образом, хотя простых чисел «бесконечно много», однако встречаются они в натуральном ряду «бесконечно реже», чем нату­ральные.
В 1737 г. Эйлер доказал, что ряд чисел, обратных простым числам, т. е. ряд 1/2 + 1/3 + 1/5 +... расходится. Из этой теоремы следует также, что простые числа расположены в натуральном ряду «гуще», чем чис­ла, являющиеся квадратами, поскольку известно, что ряд 1/12+ +1/22 + + 1/32 +... сходится.
В 1808 г. Лежандр опубликовал эмпирически найденную формулу
()
xx
x
ln 1, 08366
,
которая при больших значениях х давала приближенные значения для π(х).
35
В 1848 г. П. Л. Чебышёв доказал, что если предел отношения π(х):
х/ln х при х → ∞ существует, то он равен единице. Существование же этого предела было доказано в 1896 г. одновременно французским мате­матиком Е. Адамаром (18651963 гг.) и бельгийским математиком Ш. Ла Балле Пуссеном (18661962 гг.). Таким образом, было доказано асимптотическое равенство π(х) ~ х/ln х.
В ходе развития теории чисел математиками выделялись и изуча­лись отдельные классы простых чисел. Так, например, Ферма, рас-
n
сматривая числа вида
2
21
, выдвинул гипотезу о том, что эти числа
являются простыми при всех натуральных п (проверив ее лишь для
5
п = 1, 2, 3, 4). Однако позднее Эйлер показал, что число
n
ставное. В настоящее время числа вида
2
21
называются числами
2
21
со-
Ферма. К настоящему времени известно много составных чисел Ферма и не найдено ни одного нового простого числа Ферма. Французский математик М. Мерсенн (15881648 гг.) особо интересовался простыми числами вида 2n – 1, называя их совершенными. Теперь они называют­ся простыми числами Мерсенна.
Последние два столетия математики пытались доказать, что запас простых чисел-близнецов неисчерпаем. Близнецами называют пары простых чисел, отличающихся на 2, т. е. являющихся ближайшими со­седними простыми числами. Например:
(5, 7), (11, 13), (17, 19), …, (22271, 22273),…,
(1000000000061, 1000000000063)...
Факт того, что множество простых чисел-близнецов бесконечно, остается недоказанным.
В 1966 г. китайскому математику Чену Джинграну удалось пока­зать, что существует бесконечное множество пар простых и почти про­стых чисел. У настоящих простых чисел нет делителей, а почти про­стые числа уступают простым в том, что имеют два простых делителя. Например, число 13 – простое, а число 21(= 3 7) – почти простое. Ученый доказал, что существует бесконечно много случаев, когда про­стое число имеет в качестве близнеца либо другое простое число, либо почти простое число.
36
Следующая загадка простых чисел восходит к 1742 г., когда Хри­стиан Гольдбах, учитель царя Петра I, написал письмо великому мате­матику Леонарду Эйлеру. Рассмотрев десятки чисел, Гольдбах заме­тил, что любое четное число п ≥ 4 представимо в виде суммы двух простых чисел, а любое нечетное п ≥ 7 представимо в виде суммы трех простых чисел, т. е.
4 = 2 + 2;
6 = 3 + 3;
8 = 3 + 5;
10 = 5 + 5;
50 = 19 + 31;
100 = 53 + 47;
21000 = 17 + 20983;
……………….
Для нечетных чисел, больших некоторой константы, эта проблема была положительно решена советским академиком И. М. Виноградо­вым (18911982 гг.). Для четных чисел она остается открытой. Табли­ца простых чисел до 6000 представлена в прил. Б.
Приведенные здесь проблемы, как и многие другие проблемы тео­рии чисел, носят, на первый взгляд, чисто познавательный характер. В действительности же результаты, полученные в ходе решения про­блем теории чисел, не только отвечают на загадки натурального ряда чисел, но и находят применение в самых различных областях науки и техники. Так, например, числа Мерсенна и алгоритмы разложения натуральных чисел на простые множители находят приложения в теории кодирования и в теории линейных рекуррентных последова­тельностей; метод тригонометрических сумм, созданный И.М. Вино­градовым для решения проблемы Гольдбаха–Эйлера, применяется при вычислении неэлементарных интегралов, при исследовании статисти­ческих свойств последовательностей и т. д.
Программная генерация таблицы простых чисел на языке С++ (це­лесообразно также работать с типом uint64_t):
37
#include <iostream>
#include <string>
#include <vector>
using namespace std;
constexpr inline unsigned long pow2(unsigned long i) { return 1 << i; }
inline unsigned long isqrt(unsigned long a)
{
unsigned long x = a;
for(unsigned long z = 0; x!= z; )
{
z = x;
x = (x + a/x)/2;
}
return x;
}
constexpr unsigned long MAX_LIM = 1000000000; //pow2(31) - 1;
constexpr unsigned long ARR_LIM = (MAX_LIM >> 6) + 1;
const unsigned long SQR_LIM = isqrt(MAX_LIM);;
unsigned long primes[ARR_LIM] = { 0 }; // 0 - простое, 1 - составное
auto set_primes = [](unsigned long idx) { primes[idx >> 6] |= pow2((idx&0x0000003F)>>1); };
auto get_primes = [](unsigned long idx) { return primes[idx >> 6] & pow2((idx&0x0000003F)>>1); };
vector<unsigned long> Primes;
void makePrimes()
{
for(unsigned long j = 9; j <= MAX_LIM; j += 3)
{
if (j%2) set_primes(j);
}
for(unsigned long i = 5; i <= SQR_LIM; i += 6)
{
if (get_primes(i)) continue;
for(unsigned long j = i * i; j <= MAX_LIM; j += i)
{
if (j%2) set_primes(j);
}
}
for(unsigned long i = 7; i <= SQR_LIM; i += 6)
{
if (get_primes(i)) continue;
38
for(unsigned long j = i * i; j <= MAX_LIM; j += i)
{
if (j%2) set_primes(j);
}
}
Primes.reserve(55000000);
Primes.push_back(2);
for(unsigned long i = 3; i <= MAX_LIM; i+=2)
{
if (get_primes(i)) continue;
Primes.push_back(i);
}
}
vector<unsigned long> * factors(long long L, vector<unsigned long> * v = 0)
{
if (v == 0) v = new vector<unsigned long>;
if (L == 1) return v;
for(auto f: Primes)
{
if (f*f > L) {
v->push_back(L);
return v;
}
if (L%f == 0)
{
v->push_back(f);
return factors(L/f,v);
}
}
return v;
}
Задания для самостоятельного решения
1. Исследовать, какие из чисел между 2320 и 2350 являются про-
стыми. То же – между числами 2640 и 2680.
2. Найти все простые числа между числами 1300 и 1350.
3. Разложить на простые множители число 2
4. Показать, что при натуральном n > 1 число n
18
+ 318.
4
+ 4 составное.
То же – для n4 + n2 + 1.
39
5. Найти значения простого числа р, если известно, что 4р
6р2 + 1 – тоже простые числа.
6. Найти значения простого числа р, если известно, что р + 10 и
р + 14 – тоже простые числа.
7. Если перенумеровать все простые числа, начиная с 5, то каждое
простое число будет больше своего утроенного номера.
8. Показать, что если простое число р > 5, то его квадрат при деле-
нии на 30 должен давать остаток, равный 1 или 19.
9. Показать, что если р и q – простые числа, большие 3, то р
кратно 24.
10. Существуют ли такие натуральные числа x, y, z, что
2x 34 26y = 39z?
2
+ 1 и
3
– q2
40
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]