Разработка модулей генерации заданий и решений по теме

advertisement
ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ
ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ
ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ
ТЮМЕНСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
Институт математики и компьютерных наук
Кафедра информационной безопасности
Допустить к защите в ГАК
Заведующий кафедрой
информационной безопасности,
д.т.н.,профессор А.А. Захаров
“____” _________ 2010 г.
Мозжевилов Максим Александрович
Разработка модулей генерации заданий и решений по теме «Основы теории чисел»
(Дипломная работа)
Научный руководитель:
к.ф-м.н.,доцент кафедры ИБ.
__________ Ниссенбаум О.В.
Автор работы:
__________ Мозжевилов М.А.
Тюмень 2010
ВВЕДЕНИЕ .................................................................................................................................... 3
1. Аналитическая часть. .......................................................................................................... 5
1.1. Делители и делимость. .................................................................................................... 6
1.2. Алгоритм Евклида. .......................................................................................................... 7
1.3. Простота и факторизация. ............................................................................................ 10
1.3. Асимптотический закон распределения простых чисел. ........................................... 11
1.4. Функция Эйлера. ........................................................................................................... 13
1.5. Примеры заданий к рассмотренным темам ................................................................ 14
2. Практическая часть. .......................................................................................................... 15
2.1. Предметная область. ..................................................................................................... 15
2.2. Цели применения модулей. .......................................................................................... 16
2.3. Способы применения модулей. .................................................................................... 17
2.4. Апробация. ..................................................................................................................... 18
2.5. Средства разработки модулей ...................................................................................... 19
2.6. Документация ................................................................................................................ 20
2.7. Интеграция модулей в программный комплекс. ........................................................ 21
2.8. Модуль NOD. ................................................................................................................. 21
2.9. Модуль Asimp. ............................................................................................................... 24
2.10. Модуль Eiler. ................................................................................................................ 27
ЗАКЛЮЧЕНИЕ .......................................................................................................................... 29
СПИСОК ЛИТЕРАТУРЫ: ....................................................................................................... 30
Приложение 1. Руководство пользователя. ........................................................................... 31
Приложение 2. Документация программиста....................................................................... 44
Приложение 3. Примеры работы модулей. ........................................................................... 72
2
ВВЕДЕНИЕ
Профессия преподаватель образовалась с древнейших времен. Сначала
ценные знания переходили по наследству от отца к сыну в индивидуальном
обучении, позже образовывались школы и так начало практиковаться
групповое обучение. Это направление развивалось и развивается до сих пор,
происходит образование новых различных обучающих структур, система
обучения постоянно модернизируется, происходит появление высших
учебных заведений.
Актуальность проблем, связанных с преподаванием повышается с
каждым днем в связи с развитием системы преподавания, компьютеризацией
рабочих мест и росту сферы информационных технологий и компьютерных
наук. Одной из таких проблем является отсутствие автоматизации основных
аспектов работы преподавателя. В частности: составление и проверка
заданий для самостоятельных и контрольных работ.
В 2009 году в Тюменском Государственном Университете на 4 курсе
специальности «Компьютерная безопасность» была введена рейтинговая
система оценки знаний, была составлена и утверждена новая рабочая учебная
программа по дисциплине «Теоретико-числовые методы в криптографии». В
этой программе предусмотрены индивидуальные домашние контрольные
работы по всем дидактическим единицам курса, т.е. для учебнометодического обеспечения данного курса необходимо разработать не менее
40 индивидуальных домашних контрольных работ. Более того, желательно
ежегодное обновление вариантов контрольных работ. Желательно так же
автоматизация
проверки
контрольных
работ.
Помимо
домашних
контрольных работ предусмотрены аудиторные контрольные работы, а так
же тестирование остаточного знания по предмету, что так же увеличивает
количество индивидуальных контрольных заданий.
Мой проект – Разработка модулей генерации заданий и решений по теме
«Основы теории чисел» поможет свести к минимуму усилия преподавателя,
3
затраченные
на
составление,
решение
и
проверку
заданий
для
самостоятельных и контрольных работ по дисциплине «Теоретико-числовые
методы в криптографии». Целью создания и внедрения данного проекта
является повышение объективности оценки знаний студентов в данной
области.
Цель и задачи работы:
Проектирование и разработка модулей автоматической
заданий и решений по теме «Основы теории чисел» по
генерации
дисциплине
«Теоретико-числовые методы в криптографии».
Для достижения цели исследования поставим следующие задачи:
 исследовать предметную область;
 определить список тем и заданий;
 спроектировать и разработать модули генерации заданий и
решений;
 разработать документацию;
 сформировать базу учебных задач.
4
1. Аналитическая часть.
Открытие
натуральных
чисел
было
одним
из
величайших
интеллектуальных достижений человечества. Что общего между тремя
мамонтами, тремя звездами и тремя вздохами отвергнутого влюбленного? С
точки зрения потребительских качеств ничего. Мамонт – это еда, вот она
здесь у входа в пещеру, от нее зависит жизнь племени. Звезды в небе, их не
потрогаешь, ночью их видно, а днем нет. Вздох вообще нечто не совсем
материальное, отдельно от человека не существующее.
Очень не скоро было замечено, что общее между разными предметами и
событиями то, что при их перечислении нужно загнуть одно и то же число
пальцев на руке, в нашем примере три. Кстати, и до сих пор, (вспомните
золотое детство), обучаясь счету, малыши загибают пальцы. С пальцами же
связано и возникновение десятичной системы счисления. Кстати, если бы 400
млн. лет назад на берег из океана выползла не пятипалая двоякодышащая
рыба, потомками которой мы являемся, а, например, с четырьмя лучами на
плавнике, то победила бы восьмеричная система счисления.
Как бы то ни было, человечеством была освоена главная идея, лежащая в
основе
понятия
о
натуральном
числе.
Идея
взаимнооднозначного
соответствия или биекции между элементами разных множеств.
Множество натуральных чисел сейчас принято обозначать ажурной
заглавной буквой N. Натуральными числами являются {1,2,3,…}. Понятие о
нуле возникло гораздо позже, чем об остальных целых числах. Ноль
обозначает ничто, однако 0 – вполне осязаемый символ ничем не хуже чем 1
или 5. Ноль – это нечто, а обозначает он ничто. Нечто обозначающее ничто –
это уже шаг к раздвоению личности и он нормальным людям дался нелегко.
Отрицательные числа (понимаемые как долг, как недостача) вошли в
сознание людей гораздо проще, так же как и дроби, понимаемые как часть
единого целого.
5
1.1. Делители и делимость.
Для данных целых чисел a и b говорят, что a делит b (или b делится на
a), и используют обозначение a|b, если существует такое целое число d, что b
= ad. В этом случае a называют делителем b. Любое целое число b > 1 имеет,
по крайней мере, два положительных делителя: 1 и b. Под собственным
делителем b подразумевают любой положительный делитель, не равный b, а
под нетривиальным делителем b – любой положительный делитель, не
равный 1 или b. Простым числом, по определению, является целое число,
большее 1, которое не имеет положительных делителей, отличных от 1 и
самого себя; число называется составным, если оно имеет, по крайней мере,
один нетривиальный делитель.
Для простого p и целого неотрицательного числа α мы используем
запись pα|| b, подразумевая, что pα – наивысшая степень p, делящая b.
Основная теорема арифметики утверждает, что любое натуральное
число n может быть записано в виде произведения простых чисел
единственным образом (с точностью до перестановки сомножителей).
Принято записывать это разложение в виде произведения различных простых
сомножителей в соответствующих степенях, располагая простые числа в
порядке возрастания. Например, 1200 = 23∙3∙52∙7.
Из единственности разложения целых чисел на простые множители
следует также простой способ отыскания всех делителей n по его
разложению. А именно, любой делитель d числа n должен быть
произведением тех же простых сомножителей в степенях, не превышающих
степени, точно делящие n. Таким образом, если pα|| n, то pβ|| d для некоторого
β, удовлетворяющего условию 0 ≤ β ≤ α. Например, для нахождения
делителей числа 4300 нужно взять 2 в степени 0, 1, 2 или 3, умножить на 3 в
степени 0 или 1, на 5 в степени 0, 1 или 2 и на 7 в степени 0 или 1. Число всех
сомножителей, таким образом, есть произведение числа способов выбора
степени для каждого простого сомножителя, которое, в свою очередь, равно
6
α+1. Иначе говоря, число n = p1α1 p2α2… prαr имеет (α1+1) (α2+1) ... (αr+1)
различных делителей. В частности, у числа 4300 их 48.
Наибольшим общим делителем двух данных целых чисел a и b
(обозначаемым НОД(a, b)), не равных одновременно нулю, называется
наибольшее целое число d, делящее и a, и b. Если имеются разложения на
простые множители двух чисел a и b – легко записать и НОД(a, b). Следует
взять все простые числа, входящие в оба разложения, и каждое возвести в
степень, равную минимуму из двух соответствующих показателей. Например,
сравнивая разложение 10780 = 22∙5∙72 с приведенным выше разложением
числа 4200, получаем, что НОД(4200, 10780) = 22∙5∙7 = 140.
Наименьшее общее кратное чисел a и b обозначается НОК(a, b) и по
определению
является
наименьшим
целым
положительным
числом,
делящимся как на a, так и на b. Имея разложение на простые сомножители
чисел a и b, можно получить НОК(a, b), взяв все простые числа, входящие
хотя бы в одно из разложений, и каждое возвести в степень, равную
максимуму из двух показателей. Легко показать, что НОК(a, b)=|ab|/НОД(a,b).
1.2. Алгоритм Евклида.
При работе с большими числами часто случается, что их разложение на
простые множители неизвестно. В частности, важным направлением
исследований в теории чисел является отыскание быстрых методов
разложения больших чисел на простые множители. К счастью существует
сравнительно быстрый способ нахождения НОД (a,b) даже в том случае, когда
неизвестны простые делители a или b. он называется алгоритмом Евклида.
Реализация алгоритма Евклида (вариант алгоритма с вычитанием).
Вход: a, b>0.
1. Если a>b  Шаг 3
если a<b  Шаг 2
если a=b  Шаг 5 (выход)
2. Меняем местами a и b.
7
3. a:=a–b
4. Возвращаемся на Шаг 1.
5. Выход: a – НОД
Ниже приведен пример использования этой реализации алгоритма.
Пример
a=603, b=108
Преобразования алгоритма записаны в таблицу, верхняя строка которой
содержит значение переменной a, нижняя – содержимое переменной b.
Каждый столбец таблице соответствует состоянию процесса на отдельном
шаге.
a 603 495 387 279 171 63 108 45 63 18 45 27
9
18
9
b 108 108 108 108 108 108 63 63 45 45 18 18 18
9
9
Ответ: НОД (603,108)=9.
Реализация алгоритма Евклида (вариант алгоритма с делением с
остатком).
Вход: a, b >0.
1. Находим разложение a=bq+r, 0≤r<b
2. если r=0  Шаг 5 (выход)
3. a:=b; b:=r.
4. Возвращаемся на Шаг 1
5. Выход: b – НОД.
Пример
a=603, b=108
a
603 108
63
45
27
18
b
108
45
27
18
9
63
603=5·108+63
108=1·63+45
63=1∙45+27
45=1∙27+18
27=1∙18+9
8
18=2∙9+0
Ответ: НОД (603,108)=9.
Бинарный алгоритм Евклида.
Этот вариант создан специально для реализации на ЭВМ. В нем
учитывается, что операция деления на число 2 или на любую степень двойки
является весьма быстрой и простой операцией (в двоичной системе счисления
операция деления на 2 есть всего лишь битовый сдвиг вправо).
Учтем, что (2k∙a,2s∙b)=2min(k,s)(a,b).
Алгоритм:
Вход: a, b>0.
k1
k2
1. Представим a и b в виде: a  2  a1 ; b  2  b1 , где a1, b1 –
нечетные числа.
k:=min(k1,k2).
2. Если a1>b1  Шаг 4
a1< b1  Шаг 3
a1= b1  Шаг 6
3. Меняем местами a1 и b1.
4. c:=a1–b1=2s∙c1 (c1 - нечетное число)
(Заметим, что с обязательно будет четным, а значит s  1 )
5. a1:= b1 , b1:=c1 . Возвращаемся на Шаг 1.
6. Выход: (a,b)=2k∙a1 .
Пример
a=603, b=108
a1
603 27
9
b1
27
9
9
c1
9
9
–
1. a1=603, k1=0; b=108=4∙27=22∙27  k2=2, b1=27, k=0
2. a1=603> b1=27  Ш4
4. c=603-27=56=64∙9, c1=9
9
5. a1=27; b1=9  Ш1
1. a1=27; b1=9
2. a1> b1  Ш4
4. c=a1–b1=18=2∙9, c1=9
5. a1=9, b1=9
1. a1=9, b1=9, k=0
2. a1= b1  Ш6
6. (a,b) = 2º∙9=9
1.3. Простота и факторизация.
Во многих случаях требуется выяснить, является ли большое число n
простым. Например, в системе открытого ключа RSA и различных системах,
основанных на задаче дискретного логарифмирования в конечных полях, нам
нужно найти большое «случайное» простое число. Один из подходов к этому
заключается в том, чтобы выбрать большое нечетное целое число n0,
используя генератор случайных чисел, и затем проверять n0, n0+2, … на
простоту до тех пор, пока мы не найдем первое простое число, большее или
равное n0. Другой тип использования тестов на простоту – выяснение того,
является ли некоторое число весьма специального типа простым.
Тест на простоту представляет собой критерий того, что число n не
является простым. Если n «проходит» этот тест, то оно, возможно, простое
число. Если оно «проходит» целый набор тестов на простоту, то весьма
вероятно, что оно действительно является простым. С другой стороны, если n
не проходит хотя бы одного теста на простоту, то оно совершенно
определенно является составным. Однако при этом остается нерешенной
трудная
задача
нахождения
простых
делителей
числа
n
(задача
факторизации). В общем случае для разложения на множители большого
числа, о котором известно, что оно составное (поскольку оно не прошло теста
на простоту), требуется гораздо больше времени, чем для нахождения
простого числа того же порядка величины. (это – эмпирическое утверждение,
10
а не теорема; ни одного утверждения такого рода не доказано). Надежность
криптосистемы RSA основывается на том предположении, что значительно
легче найти два чрезвычайно больших простых числа p и q, чем зная n = pq,
но не p или q, найти делители числа n.
Существует
множество
полиномиальных
тестов
простоты,
но
большинство из них являются вероятностными (например, тест МиллераРабина) и используются для нужд криптографии. Только в 2002 году было
доказано, что задача проверки на простоту в общем виде полиномиально
разрешима, но предложенный детерминированный алгоритм имеет довольно
большую сложность, что затрудняет его практическое применение.
Для
некоторых
классов
чисел
существуют
специализированные
эффективные тесты простоты. Например, для проверки на простоту чисел
Мерсенна используется тест Люка-Лемера, а для проверки на простоту чисел
Ферма-тест Пепина.
1.3. Асимптотический закон распределения простых чисел.
Современная
практическая
криптография
требует
использования
больших простых чисел – в некоторых стандартах используются простые
числа размером порядка 1024 бита.
Для поиска простых чисел с помощью таких тестов используют
следующий подход: из чисел заданного диапазона случайным образом
выбирают числа и проверяют их на простоту. Поиск прекращается как только
будет найдено простое число. Такой подход называют случайным поиском
простых чисел.
Для того чтобы оценить время, которое придется затратить на
случайный поиск в заданном диапазоне, необходимо знать, сколько примерно
простых чисел в этом диапазоне содержится. Конечно, точное распределение
простых чисел в N неизвестно, но некоторые сведения об этом распределении
у современной математики имеются.
11
Более точно на вопрос о распределении простых чисел в N отвечает
асимптотический закон распределения простых чисел.
Итак, обозначим π(x) – количество простых чисел, меньших либо
равных x. Тогда справедлив
Асимптотический закон простых чисел
( x)
lim
x
ln x
 1.
x
■
Другими словами, при x→∞, π(x)→x/lnx.
Пример.
Пользуясь асимптотическим законом, вычислим примерное количество
простых 512-битных чисел (таких, чтобы старший, 512-й, бит был равен 1).
Наименьшее значение 512 битного числа составляет 2511, наибольшее – 2512-1.
Таким образом, нужно найти приблизительное количество K простых чисел
из диапазона (x1=2511, x2=2512).
x2
x1
2512
2511
K = π(x2)—π(x1) ≈
=


ln x2 ln x1
ln 2512 ln 2511
2512
2511
=
=

512 ln 2 511ln 2
2 511  1
1 
2511  255

=
.

=
ln 2  256 511  256  511  ln 2
Тогда вероятность при случайном поиске в заданном диапазоне выбрать
простое число составляет
K
255
1
2511  255
P=
≈
=
≈
.
511
256  511  ln 2 356
x2  x1 256  511  ln 2  2
Если же случайный поиск производить только среди нечетных чисел,
то
P=
2K
1
≈
.
x2  x1 178
То есть для того, чтобы путем случайного перебора среди 512-битных
нечетных чисел найти простое, в среднем понадобится 178 итераций. Для
1024-битных чисел поиск среди нечетных чисел потребует в среднем 355
12
итераций. В общем, при увеличении требуемого размера числа (в битах) в 2
раза, среднее время поиска тоже увеличивается в два раза.
1.4. Функция Эйлера.
Числа a1,…,an называются взаимно простыми, если НОД(a1,…,an)=1.
Функция Эйлера φ(a) есть количество чисел ряда 0, 1, …, а–1, взаимно
простых с а ( a  Z  ).
φ(1)=1, φ(2)=1, φ(3)=2, φ(4)=2, φ(5)=4, φ(6)=2 и т. д.
Свойства функции Эйлера:
1. φ(1)=1;
2. φ(p)=p–1, где р – простое;
3. φ(pα)=pα–1(p–1) , где р – простое;
4. φ(a) – мультипликативная функция.
Пример.
Вычислим φ(28350322).
Для того, чтобы вычислить значение функции Эйлера, необходимо
найти каноническое разложение аргумента.
28350322=2·14175161=2·7·2025023=2·72·289289=2·73·41327=
=2·73·11·3757=2·73·11·13·289=2·73·11·13·172.
φ(28350322)= φ(2·73·11·13·172)= φ(2) · φ(73)· φ(11)· φ(13)· φ(172)=
=1·72·6·10·12·17·16=9596160.
Ответ: φ(28 350 322)=9 596 160.
Стоит отметить, что функция Эйлера применяется в криптосистеме
RSA.
Криптографическая
система
RSA
получила
очень
широкое
распространение и является классическим примером криптографической
системы с открытыми ключами.
Открытый ключ состоит из пары чисел (n, e), где n – произведение двух
больших простых чисел p и q, а e должно быть меньше числа φ(n)=(p-1)(q-1)
и взаимно просто с ним.
13
Секретный же ключ состоит из пары чисел (n, d), где число d такое, что
de ≡ 1 mod φ(n).
1.5. Примеры заданий к рассмотренным темам
Для освоения перечисленных выше тем можно предложить следующие
задания:
 Вычислить НОД(a,b) при помощи алгоритма Евклида с вычитанием.
 Вычислить НОД(a,b) при помощи алгоритма Евклида с делением с
остатком.
 Вычислить НОД(a,b) при помощи бинарного алгоритма Евклида.
 Вычислить НОД(a,b) при помощи алгоритма Евклида с делением с
остатком и бинарного алгоритма Евклида. Сравнить количество
итераций.
 Найти каноническое разложение числа на простые сомножители.
 Вычислить НОК(a,b).
 Построить таблицу первых простых чисел с помощью решета
Эратосфена.
 Разложить дробь в цепную дробь при помощи алгоритма Евклида.
 Вычислить примерное количество простых чисел на заданном
интервале.
 Вычисляет вероятность того, что наугад выбранное число из
указанного диапазона будет простым.
 Вычисляет, сколько чисел из заданного диапазона следует перебрать,
чтобы с определенной вероятностью получить хотя бы одно простое.
 Вычислить функцию Эйлера от числа.
14
2. Практическая часть.
2.1. Предметная область.
Современная
криптография
в
значительной
мере
использует
результаты таких дисциплин как алгебра, теория чисел, теория сложности.
Студентам, изучающим криптографию всерьез, необходимо знание ее
математических основ, поскольку ничто так не помогает знанию как
понимание, а понимание алгоритмов криптографии и криптоанализа
невозможно без понимания идей, которые в них заложены.
Для разработки модулей генерации заданий и решений по теме
«Основы теории чисел» были выбраны следующие темы:
 Делители и делимость.
 Асимптотический закон распределения простых чисел.
 Функция Эйлера.
Данные темы являются обязательными в изучении дисциплины
«Теоретико-числовые методы в криптографии».
Теоретические результаты данных разделов являются основой для
поиска и проверки простых чисел, которые широко применяются в
различных областях криптографии. Большие простые числа используются в
криптографии с открытым ключом. Криптографические системы с открытым
ключом в настоящее время широко применяются в различных сетевых
протоколах, в частности, в протоколах TLS и его предшественнике SSL.
Простые числа также используются в хеш-таблицах и для генерации
псевдослучайных чисел. Получение случайных простых чисел является
неотъемлемой
частью
процедур
выработки
ключей
во
многих
криптографических алгоритмах, включая RSA и ElGamal. А также функция
Эйлера применяется в криптосистеме RSA для выработки открытого и
секретного ключа.
15
Из выбранных тем, для реализации модулей, были сформулированы
следующие задания:
 Вычислить наибольший общий делитель двух чисел.
o используя алгоритм с вычитанием;
o используя алгоритм с делением с остатком;
o используя бинарный алгоритм.
 Вычислить примерное количество простых чисел в заданном
промежутке.
 Вычислить вероятность того, что наугад выбранное число из
заданного диапазона будет простым.
o выбирается только нечетное число;
o выбирается только не кратное 3-м число;
o выбирается только нечетное и не кратное 3-м число;
o выбирается любое число из заданного диапазона.
 Вычислить сколько чисел из заданного диапазона следует
перебрать, чтобы с определенной вероятностью получить хотя бы
одно простое.
o перебираются только нечетные числа;
o перебираются только числа не кратные 3-м;
o перебираются только нечетные и не кратные 3-м числа;
o перебираются все числа из заданного диапазона.
 Вычислить функцию Эйлера от числа.
Данные задания направлены на формирование у студента умений и
навыков, необходимых для лучшего усвоения теоретического материала по
выбранным темам.
2.2. Цели применения модулей.
Для одного потока студентов, в общей сложности необходимо
сформировать примерно 1000 заданий по теме «Основы теории чисел».
Поэтому
преподаватель
вынужден
прилагать
уйму
усилий,
чтобы
16
подготовить проверочные материалы для студентов. В результате усталости
и переутомления нередко возникают случаи, когда преподаватель при
составлении или проверке заданий не замечает ошибки там, где они есть или
наоборот, видит ошибку там, где ее нет, вследствие чего знания студентов
могут быть оценены не правильно.
Модули автоматической генерации заданий и решений в первую
очередь призваны облегчить труд преподавателя, путем снижения затрат
времени и сил на подготовку и проверку заданий для самостоятельных и
контрольных работ, что позволит дать максимально адекватную оценку
знаниям, а так же выявить пробелы в знаниях студентов.
Применение модулей:
 текущий контроль знаний;
 обучение;
 самопроверка.
Для итогового контроля знаний и для проверки остаточных знаний,
безусловно, лучше подходит тестирование, но для текущего контроля знаний
лучше подойдут контрольные работы, т.к. они позволяют преподавателю
определить не только уровень знаний и оценку студента, но и причины
неуспеваемости и пробелы в знаниях данного студента. Самостоятельное
выполнение студентом заданий с последующей проверкой по готовому
решению, полученному от преподавателя, подходит для самопроверки и
обучения студентов. Таким образом, задания, в виде контрольных работ
весьма полезны в обучении дисциплине «Теоретико-числовые методы в
криптографии».
2.3. Способы применения модулей.
Текстовые проверочные работы.
В результате работы модуля формируются два текстовых файла. В
одном файле записаны сгенерированные задания для студентов, а во втором
достаточно подробное решение этих заданий. Таким образом, для проведения
17
проверочной
работы,
преподавателю
достаточно
распечатать
сгенерированные модулем файлы и раздать студентам распечатки с
заданиями, а распечатки с решениями позволят преподавателю достаточно
быстро и с меньшими усилиями проверить работы студентов и выявить
ошибки и неточности в их решении.
Обучение
Выявленные пробелы в знаниях студентов во время проверочных
работ, позволят преподавателю в дальнейшем ходе обучения сделать упор на
те моменты, которые были плохо усвоены, чтобы восполнить пробелы в
знаниях студентов. А также в процессе обучения гораздо легче усваивать
новый материал, рассматривая его на наглядных примерах, которые с
легкостью могут быть получены при помощи модулей генерации заданий и
решений.
Самоконтроль.
Многие студенты хотят быть уверены в том, что они поняли тему и
научились правильно решать задания или же просто хотят «набить руку»
перед предстоящей контрольной работой. В этом им, безусловно, помогут
готовые решения заданий, созданные модулями генерации заданий и
решений.
2.4. Апробация.
В ходе проведения проверки модулей генерации заданий и решений по
теме «Основы теории чисел» на корректность составления и правильность
решения заданий было выявлено, что все сгенерированные задания и
решения, предоставленные для проверки группе студентов 5 курса
специальности «Компьютерная безопасность», составлены корректно и
решены правильно.
После чего была сформирована база контрольных работ по предмету
«Теоретико-числовые методы в криптографии», часть из которых была
использована для проведения самостоятельной работы среди студентов 4
18
курса специальности «Компьютерная безопасность» в феврале 2010. А также
некоторые
из
сформированных
заданий
были
использованы
для
прорешивания на практических занятиях по предмету «Теоретико-числовые
методы в криптографии» в феврале 2010 года.
2.5. Средства разработки модулей
В качестве средства разработки модулей генерации заданий и решений
на тему «Основы теории чисел» был выбран объектно-ориентированный
язык программирования – С#.
C#
разработан
в
1998—2001
годах
группой
инженеров
под
руководством Андерса Хейлсберга в компании Microsoft как основной язык
разработки приложений для платформы Microsoft .NET. Компилятор C#
входит в стандартную установку самой .NET, поэтому программы на нём
можно создавать и компилировать даже без инструментальных средств,
вроде Visual Studio.
C# относится к семье языков с C-подобным синтаксисом, из них его
синтаксис наиболее близок к C++ и Java. Язык имеет статическую
типизацию, поддерживает полиморфизм, перегрузку операторов (в том числе
операторов явного и неявного приведения типа), делегаты, атрибуты,
события, свойства, обобщённые типы и методы, итераторы, анонимные
функции с поддержкой замыканий, LINQ, исключения, комментарии в
формате XML.
Переняв многое от своих предшественников — языков C++, Java,
Delphi, Модула и Smalltalk — С#, опираясь на практику их использования,
исключает некоторые модели, зарекомендовавшие себя как проблематичные
при
разработке
программных
систем:
так,
C#
не
поддерживает
множественное наследование классов (в отличие от C++).
Особенности языка
C# разрабатывался как язык программирования прикладного уровня
для CLR (Common Language Runtime – «общеязыковая исполняющая среда»)
19
и, как таковой, зависит, прежде всего, от возможностей самой CLR. Это
касается, прежде всего, системы типов C#, которая отражает FCL (Framework
Class Library – стандартная библиотека классов платформы «.NET
Framework»). Присутствие или отсутствие тех или иных выразительных
особенностей языка диктуется тем, может ли конкретная языковая
особенность быть транслирована в соответствующие конструкции CLR. Так,
с развитием CLR от версии 1.1 к 2.0 значительно обогатился и сам C#;
подобного взаимодействия следует ожидать и в дальнейшем. (Однако эта
закономерность была нарушена с выходом C# 3.0, представляющим собой
расширения языка, не опирающиеся на расширения платформы .NET.) CLR
предоставляет C#, как и всем другим .NET-ориентированным языкам, многие
возможности, которых лишены «классические» языки программирования.
Например, сборка мусора не реализована в самом C#, а производится CLR
для программ, написанных на C# точно так же, как это делается для
программ на VB.NET, J# и др.
2.6. Документация
Для каждого модуля разработана подробная документация для
пользователей. Описываются правила заполнения входных параметров
программы, значения каждого параметра и его влияние на остальные
параметры. Руководство пользователя приведено в Приложении 1.
Поскольку данный проект имеет перспективы на дальнейшее развитее,
составлена документация для программиста, в которой описываются все
параметры, переменные и функции, использующиеся в каждом модуле. Это
облегчит работу для будущих программистов, которые будут заниматься
разработкой дополнительных модулей на различные темы и дисциплины или
усовершенствованием существующих модулей. Документация программиста
приведена в Приложении 2.
20
2.7. Интеграция модулей в программный комплекс.
Основной целью данного проекта является разработка модулей в виде
библиотек функций - DLL (Dynamic-link library – динамически подключаемая
библиотека), подключаемых к программному комплексу. Это позволяет
создавать полноценные контрольные работы, состоящие из различных тем,
список которых определяется подключенными модулями. Вместе с этим
каждый
из
модулей
имеет
возможность
работать
независимо
от
программного комплекса генерации контрольных работ.
Возможности модулей как независимых приложений:
 Регулирование уровня сложности и количества генерируемых
заданий путем изменения входных параметров.
 Создание текстовых файлов c заданиями и решениями в
указанном месте.
Возможности программного комплекса.
 Подключение необходимых модулей к системе.
 Работа со всеми модулями как с одним целым.
 Регулирование уровня сложности и количества генерируемых
заданий для каждого подключенного модуля.
 Создание текстовых файлов, содержащих в себе задания и
решения всех подключенных к системе модулей.
2.8. Модуль NOD.
На рисунке 1 представлен интерфейс модуля NOD.
Рисунок 1. Интерфейс модуля NOD.
21
Данный модуль находит наибольший общий делитель двух чисел,
используя при этом выбранный вариант алгоритма Евклида:
 алгоритм с вычитанием;
 алгоритм с делением с остатком;
 бинарный алгоритм.
Задание генерируется путем выбора двух случайных чисел из
указанных диапазонов для каждого из чисел. Решение генерируется в
соответствии с выбранным алгоритмом. Файлы с заданием и решением
генерируются в указанном месте.
Пример работы модуля NOD.
Установлены следующие входные параметры:
 количество заданий – 2;
 a = от 1 до 100;
 b = от 1 до 100;
 алгоритм Евклида – с делением с остатком.
Содержание сгенерированного файла с заданиями:
Вычислить НОД(a,b) при помощи алгоритма Евклида с использованием
деления с остатком, где:
а) a = 85, b = 9;
б) a = 97, b = 51.
Содержание сгенерированного файла с решениями:
Вычислить НОД(a,b) при помощи алгоритма Евклида с использованием
деления с остатком, где:
а) a = 85, b = 9.
Решение:
a
b
85
9
9
4
4
1
85=9∙9+4
9=2∙4+1
4=4∙1+0
Ответ: НОД(85,9)=1.
б) a = 97, b = 51.
Решение:
a
b
97
51
51
46
46
5
5
1
22
97=1∙51+46
51=1∙46+5
46=9∙5+1
5=5∙1+0
Ответ: НОД(97,51)=1.
Установлены следующие входные параметры:
 количество заданий – 2;
 a = от 50 до 500;
 b = от 100 до 200;
 алгоритм Евклида – бинарный алгоритм.
Содержание сгенерированного файла с заданиями:
Вычислить НОД(a,b) при помощи бинарного алгоритма Евклида, где:
а) a = 297, b = 114;
б) a = 63, b = 134.
Содержание сгенерированного файла с решениями:
Вычислить НОД(a,b) при помощи бинарного алгоритма Евклида, где:
а) a = 297, b = 114.
Решение:
297=20∙297, k1=0; 114=21∙57, k2=1.
=> k=min(k1,k2)=0, a1=max(297,57)=297, b1=min(297,57)=57.
c=297-57=240=24∙15, c1=15, a1=max(b1,c1)=57, b1=min(b1,c1)=15.
c=57-15=42=21∙21, c1=21, a1=21, b1=15.
c=21-15=6=21∙3, c1=3, a1=15, b1=3.
c=15-3=12=22∙3, c1=3, a1=3, b1=3.
Ответ: НОД(297,114)=2k∙b1=20∙3=3.
б) a = 63, b = 134.
Решение:
63=20∙63, k1=0; 134=21∙67, k2=1.
=> k=min(k1,k2)=0, a1=max(67,63)=67, b1=min(67,63)=63.
c=67-63=4=22∙1, c1=1, a1=max(b1,c1)=63, b1=min(b1,c1)=1.
c=63-1=62=21∙31, c1=31, a1=31, b1=1.
c=31-1=30=21∙15, c1=15, a1=15, b1=1.
c=15-1=14=21∙7, c1=7, a1=7, b1=1.
c=7-1=6=21∙3, c1=3, a1=3, b1=1.
c=3-1=2=21∙1, c1=1, a1=1, b1=1.
Ответ: НОД(63,134)=2k∙b1=20∙1=1.
23
2.9. Модуль Asimp.
На рисунке 2 представлен интерфейс модуля ASIMP.
Рисунок 2. Интерфейс модуля ASIMP.
Данный модуль выполняет три варианта заданий, основанных на
асимптотическом законе распределения простых чисел:
 вычисляет примерное количество простых чисел в заданном
диапазоне;
 вычисляет вероятность того, что наугад выбранное число из
указанного диапазона будет простым; при этом есть возможность
задать ограничение на выбираемое наугад число:
o выбирается только нечетное число;
o выбирается только не кратное 3-м число;
o выбирается нечетное и некратное 3-м число;
o выбирается любое число из заданного диапазона;
 вычисляет, сколько чисел из заданного диапазона следует
перебрать, чтобы с определенной вероятностью получить хотя бы
одно простое; при этом есть возможность задать ограничение на
перебираемые числа:
o выбираются только нечетные числа;
o выбираются только не кратные 3-м числа;
24
o выбираются нечетные и некратные 3-м числа;
o выбираются любые числа из заданного диапазона.
На основе введенных входных параметров программы генерируются
файлы с заданиями и решениями этих заданий.
Пример работы модуля ASIMP.
Установлены следующие входные параметры:
 вариант задания – вычисляет, сколько чисел из заданного
диапазона
следует
перебрать,
чтобы
с
определенной
вероятностью получить хотя бы одно простое
o выбираются нечетные и некратные 3-м числа;
 a = от 500 до 5000;
 d = от 10000 до 50000;
 количество заданий – 2.
Содержание сгенерированного файла с заданиями:
Сколько нечетных и не кратных 3-м чисел из диапазона от a до b
следует перебрать, чтобы с вероятностью не менее p получить хотя
бы одно простое? (перебранные числа не исключаются из множества
перебора).
а) a = 2700, b = 40000, p = 0,8;
б) a = 1300, b = 50000, p = 0,95.
Содержание сгенерированного файла с решениями:
Сколько нечетных и не кратных 3-м чисел из диапазона от a до b
следует перебрать, чтобы с вероятностью не менее p получить хотя
бы одно простое? (перебранные числа не исключаются из множества
перебора).
а) a = 2700, b = 40000, p = 0,8.
Решение:
Примерное количество простых чисел в диапазоне от 2700 до 40000
есть
K = π(b) - π(a) = b/ln(b) - a/ln(a) ≈ 3433,05.
Количество чисел, больших 2700 и меньших 40000, есть 37300. Доля
нечетных и не кратных 3-м чисел есть 1/3. Тогда всего перебирается
чисел 12433,33. Вероятность случайного выбора простого числа есть
P = 3433,05 / 12433,33 ≈ 0,28.
25
Вероятность достичь успеха хотя бы в одном из n испытаний есть
1-(1-P)n ≥ p. Тогда n ≥ log(1-P)(1-p), т.е n ≥ ln(1-p) / ln(1-P) ≥ 4,98 =>
n=5.
Ответ: требуется 5 испытаний.
б) a = 1300, b = 50000, p = 0,95.
Решение:
Примерное количество простых чисел в диапазоне от 1300 до 50000
есть
K = π(b) - π(a) = b/ln(b) - a/ln(a) ≈ 4439,86.
Количество чисел, больших 1300 и меньших 50000, есть 48700. Доля
нечетных и не кратных 3-м чисел есть 1/3. Тогда всего перебирается
чисел 16233,33. Вероятность случайного выбора простого числа есть
P = 4439,86 / 16233,33 ≈ 0,27.
Вероятность достичь успеха хотя бы в одном из n испытаний есть
1-(1-P)n ≥ p. Тогда n ≥ log(1-P)(1-p), т.е n ≥ ln(1-p) / ln(1-P) ≥ 9,38 =>
n=10.
Ответ: требуется 10 испытаний.
Установлены следующие входные параметры:
 вариант задания – вычисляет примерное количество простых
чисел в заданном диапазоне;
 a = от 100 до 1000;
 d = от 5000 до 10000;
 количество заданий – 2.
Содержание сгенерированного файла с заданиями:
Определить примерное количество простых чисел в диапазоне от a до
b, где:
а) a = 300, b = 8700;
б) a = 750, b = 6300.
Содержание сгенерированного файла с решениями:
Определить примерное количество простых чисел в диапазоне от a до
b, где:
а) a = 300, b = 8700.
Решение:
Примерное количество простых чисел в диапазоне от 300 до 8700
есть
K = π(b) - π(a) = b/ln(b) - a/ln(a) ≈ 906,5.
Ответ: K ≈ 906,5.
26
б) a = 750, b = 6300.
Решение:
Примерное количество простых чисел в диапазоне от 750 до 6300
есть
K = π(b) - π(a) = b/ln(b) - a/ln(a) ≈ 606,85.
Ответ: K ≈ 606,85.
2.10. Модуль Eiler.
На рисунке 3 представлен интерфейс модуля EILER.
Рисунок 3. Интерфейс модуля EILER.
Данный
модуль
вычисляет
функцию
Эйлера
числа,
которое
генерируется на основе введенных параметров и сохраняет в указанном
месте файлы с заданиями и решениями. При генерации задания, модуль
генерирует каноническое разложение числа на основе введенных параметров,
которое затем используется и для решения.
Задания генерируются по следующей формуле:
n = p1a1 p2a2 … pkak
где p – это простое число, значение которого генерируется случайным
образом из диапазона простых чисел от 2 до значения указанного в
параметре макс. значение множителя; a – степень множителя, значение
которой генерируется случайным образом из диапазона чисел от 1 до
значения заданного в параметре макс. степень множителя; k – это
количество множителей, значение этого параметра принимает случайное
число из диапазона чисел от 1 до значения указанного в параметре макс.
количество множителей.
27
Пример работы модуля EILER.
Установлены следующие входные параметры:
 кол-во заданий – 2;
 макс. кол-во множителей – 4;
 макс. значение множителя – 15;
 макс. степень множителя – 3.
Содержание сгенерированного файла с заданиями:
Вычислить функцию φ(n).
а) n=25350;
б) n=7700;
Содержание сгенерированного файла с решениями:
Вычислить функцию φ(n).
а) n=25350.
Решение:
n=2∙3∙52∙132.
φ(n)=1∙2∙5∙4∙13∙12 = 6240.
Ответ: φ(25350) = 6240.
б) n=7700.
Решение:
n=22∙52∙7∙11.
φ(n)=2∙5∙4∙6∙10 = 2400.
Ответ: φ(7700) = 2400.
28
ЗАКЛЮЧЕНИЕ
В ходе выполнения дипломной работы мной были изучены материалы
по теме «Основы теории чисел» и решена намеченная цель – создание
модулей автоматической генерации заданий и решений по данной теме. Для
достижения этой цели, мной в ходе выполнения работы были решены
следующие задачи:
1. Выбраны темы и задания, удовлетворяющие требованиям курса
обучения
дисциплине
«Теоретико-числовые
методы
в
криптографии»
2. Разработаны модули генерации заданий и решений. Данные модули
имеют
дружественный,
интуитивно
понятный
интерфейс
и
обладают простотой в использовании.
3. Составлена документация двух видов. Для пользователя - с
иллюстрациями интерфейса и объяснением всех параметров и
правил их заполнения. Для программиста - с объяснениями
исходного кода, параметров и функций, использующихся в данных
модулях.
4. Реализована интеграция модулей в программный комплекс. Данный
комплекс
объединяет
все
модули
в
одно
целое.
Имеет
дружественный, интуитивно понятный интерфейс и прост в
использовании.
5. Сформированы
учебные
задания
для
сборника
вариантов
контрольных работ по предмету «Теоретико-числовые методы в
криптографии».
29
СПИСОК ЛИТЕРАТУРЫ:
1. А.В.Рожков, О.В. Ниссенбаум. Теоретико-числовые методы в
криптографии:
Учебное
пособие.
Тюмень:
Издательство
Тюменского государственного университета, 2007. 160с.
2. Н.Коблиц. Курс теории чисел и криптографии. Москва: Научное
изд-во ТВП, 2001, х+254с.
3. Виноградов И.М. Основы теории чисел. М.: Наука, 1972. 402с.
4. Василенко О.Н. Теоретико-числовые алгоритмы в криптографии. –
М.: МЦНМО, 2003. – 328 с.
5. Черемушкин А.В. Лекции по арифметическим алгоритмам в
криптографии. М.: МЦНМО, 2002. – 104 с.
6. Алферов А.П., Зубов А.Ю., Кузьмин А.С., Черемушкин А.В. Основы
криптографии. Учебное пособие. М.: Гелиос-АРВ, 2001.
7. Эндрю Троелсен. С# 2008 и платформа .NET 3.5 Framework = Pro C#
2008 and the .NET 3.5 Framework. — 4-е изд. — М.: Вильямс, 2009.
— С. 1368. — ISBN 978-5-8459-1589-4
8. Герберт Шилдт. C# 3.0: полное руководство = C# 3.0: The Complete
Reference. — 4-е изд. — М.: Вильямс, 2009. — С. 992. — ISBN 9785-8459-1565-8
9. Кристиан Нейгел, Карли Уотсон и др. Visual C# 2008: базовый курс.
Visual Studio® 2008 = Beginning Visual C# 2008. — М.: Диалектика,
2009. — ISBN 978-5-8459-1317-3
10.Кристиан Нейгел, Билл Ивьен и др. C# 2008 и платформа .NET 3.5
для профессионалов = Professional C# 2008. — М.: Диалектика, 2008.
— ISBN 978-5-8459-1458-3
30
Приложение 1. Руководство пользователя.
1. Модуль EILER.
Рисунок 4
На рисунке 4 представлен интерфейс модуля EILER.
Модуль предназначен для генерации заданий и решений на тему
вычисления функции Эйлера. Модуль случайным образом генерирует
аргумент и вычисляет функцию Эйлера этого аргумента и выводит
результаты решения в текстовый файл.
Задания генерируются по следующей формуле:
n = p1a1 p2a2 … pkak
где p – это простое число, значение которого генерируется случайным
образом из диапазона простых чисел от 2 до значения указанного в
параметре макс. значение множителя; a – степень множителя, значение
которой генерируется случайным образом из диапазона чисел от 1 до
значения заданного в параметре макс. степень множителя; k – это
количество множителей, значение этого параметра принимает случайное
число из диапазона чисел от 1 до значения указанного в параметре макс.
количество множителей.
Модуль имеет следующие параметры:
 Кол-во заданий
o Это количество заданий, которые будут сгенерированы в
результате работы модуля.
31
o Может быть только целым положительным числом.
o Значение по умолчанию – 5.
o Минимальное возможное значение – 1.
o Максимальное возможное значение – 29.
 Макс. кол-во множителей
o Это
максимально
возможное
количество
простых
сомножителей, входящих в каноническое разложение
аргумента.
o Может быть только целым положительным числом.
o Минимальное значение – 1.
o Максимальное значение – 168.
o Значение по умолчанию – 4.
o Значение этого параметра прямо пропорционально влияет
на сложность генерируемых заданий.
 Макс. значение множителя
o Это максимальное значение, которое может принять
каждый простой сомножитель аргумента, при генерации
заданий.
o Может быть только целым положительным числом.
o Значение по умолчанию – 15.
o Минимальное
значение
макс.количество
–
множителей,
зависит
от
параметра
при
вводе
которого
программа сама введет минимально допустимое значение
данного параметра.
o Максимальное значение – 997.
o Значение этого параметра прямо пропорционально влияет
на сложность генерируемых заданий.
 Макс. степень множителя
o Это максимальная степень, в которой простой сомножитель
входит в каноническое разложение аргумента.
32
o Может быть только целым положительным числом.
o Значение по умолчание – 3.
o Минимальное значение – 1.
o Максимальное значение – 5.
 Сохранить в
o Это место, куда будут сохранены сгенерированные файлы
задания и решения.
o Значение по умолчанию – место, откуда был запущен
данный модуль.
o Для выбора места сохранения нужно нажать на кнопку с
тремя точками.
После ввода всех параметров, следует нажать на кнопку ОК. Модуль
сгенерирует файлы и сохранит их в указанном месте, после чего появится
информационное сообщение о готовности файлов и месте их сохранения, как
показано на рисунке 5.
Рисунок 5
Пример работы модуля.
Установлены следующие входные параметры:
 кол-во заданий – 3;
 макс. кол-во множителей – 4;
 макс. значение множителя – 15;
 макс. степень множителя – 3.
Содержание сгенерированного файла с заданиями:
Вычислить функцию φ(n).
а) n=9295;
б) n=6552;
в) n=28014525.
33
Содержание сгенерированного файла с решениями:
Вычислить функцию φ(n).
а) n=9295.
Решение:
n=5∙11∙132.
φ(n)=4∙10∙13∙12 = 6240.
Ответ: φ(9295) = 6240.
б) n=6552.
Решение:
n=23∙32∙7∙13.
φ(n)=22∙3∙2∙6∙12 = 1728.
Ответ: φ(6552) = 1728.
в) n=28014525.
Решение:
n=33∙52∙73∙112.
φ(n)=32∙2∙5∙4∙72∙6∙11∙10 = 11642400.
Ответ: φ(28014525) = 11642400.
2. Модуль NOD.
Рисунок 6
На рисунке 6 представлен интерфейс модуля NOD.
Модуль предназначен для вычисления наибольшего общего делителя
двух чисел и имеет следующие параметры:
 Сохранить в
o Это место, куда будут сохранены сгенерированные файлы
задания и решения.
o Значение по умолчанию – место, откуда был запущен
данный модуль.
34
o Для выбора места сохранения нужно нажать на кнопку с
тремя точками.
 Кол-во заданий
o Это количество заданий, которые будут сгенерированы в
результате работы модуля.
o Может быть только целым положительным числом.
o Значение по умолчанию – 5.
o Минимальное возможное значение – 1.
o Максимальное возможное значение – 29.
 от
o Это нижняя граница диапазона чисел, используемых для
генерации значений a и b.
o Может быть только целым положительным числом.
o Значение по умолчанию – 100.
o Минимальное возможное значение – 1.
o Максимальное возможное значение – 1000000.
 до
o Это верхняя граница диапазона чисел, используемых для
генерации значений a и b.
o Может быть только целым положительным числом.
o Значение по умолчанию – 1000.
o Минимальное возможное значение – 1.
o Максимальное возможное значение – 1000000.
 Метод вычисления
o Определяет, какой алгоритм будет использован для
вычисления наибольшего общего делителя чисел a и b.
o Вычитание
–
алгоритм
Евклида
с
использованием
вычитания.
o Деление с остатком – алгоритм Евклида с использованием
деления с остатком.
35
o Бинарный алгоритм – бинарный алгоритм Евклида.
После ввода всех параметров, следует нажать на кнопку НОД(a,b).
Модуль сгенерирует файлы и сохранит их в указанном месте, после чего
появится информационное сообщение о готовности файлов и месте их
сохранения, как это показано на рисунке 5(стр.32).
Пример работы модуля.
Установлены следующие входные параметры:
 количество заданий – 2;
 a = от 1 до 500;
 b = от 1 до 500;
 алгоритм Евклида – с вычитанием.
Содержание сгенерированного файла с заданиями:
Вычислить НОД(a,b) при помощи алгоритма Евклида с использованием
вычитания, где:
а) a = 300, b = 283;
б) a = 239, b = 314.
Содержание сгенерированного файла с решениями:
Вычислить НОД(a,b) при помощи алгоритма Евклида с использованием
вычитания, где:
а) a = 300, b = 283.
Решение:
a
b
79
17
300
283
62
17
17
283
45
17
283
17
28
17
266
17
11
17
249
17
17
11
232
17
6
11
215
17
11
6
198
17
5
6
181
17
6
5
164
17
1
5
147
17
130
17
113
17
96
17
89
75
14
75
75
14
61
14
47
14
33
14
19
14
5
14
14
5
Ответ: НОД(300,283)=1.
б) a = 239, b = 314.
Решение:
a
b
9
5
239
314
4
5
314
239
5
4
75
239
1
4
239
75
164
75
Ответ: НОД(239,314)=1.
Установлены следующие входные параметры:
 количество заданий – 2;
 a = от 1 до 500;
 b = от 1 до 500;
36
 алгоритм Евклида – с делением с остатком.
Содержание сгенерированного файла с заданиями:
Вычислить НОД(a,b) при помощи алгоритма Евклида с использованием
деления с остатком, где:
а) a = 411, b = 489;
б) a = 311, b = 127.
Содержание сгенерированного файла с решениями:
Вычислить НОД(a,b) при помощи алгоритма Евклида с использованием
деления с остатком, где:
а) a = 411, b = 489.
Решение:
a
b
411
489
489
411
411
78
78
21
21
15
15
6
6
3
3
2
2
1
411=0∙489+411
489=1∙411+78
411=5∙78+21
78=3∙21+15
21=1∙15+6
15=2∙6+3
6=2∙3+0
Ответ: НОД(411,489)=3.
б) a = 311, b = 127.
Решение:
a
b
311
127
127
57
57
13
13
5
5
3
311=2∙127+57
127=2∙57+13
57=4∙13+5
13=2∙5+3
5=1∙3+2
3=1∙2+1
2=2∙1+0
Ответ: НОД(311,127)=1.
Установлены следующие входные параметры:
 количество заданий – 2;
 a = от 1 до 500;
 b = от 1 до 500;
 алгоритм Евклида – бинарный алгоритм.
Содержание сгенерированного файла с заданиями:
37
Вычислить НОД(a,b) при помощи бинарного алгоритма Евклида, где:
а) a = 154, b = 246;
б) a = 83, b = 449.
Содержание сгенерированного файла с решениями:
Вычислить НОД(a,b) при помощи бинарного алгоритма Евклида, где:
а) a = 154, b = 246.
Решение:
154=21∙77, k1=1; 246=21∙123, k2=1.
=> k=min(k1,k2)=1, a1=max(123,77)=123, b1=min(123,77)=77.
c=123-77=46=21∙23, c1=23, a1=max(b1,c1)=77, b1=min(b1,c1)=23.
c=77-23=54=21∙27, c1=27, a1=27, b1=23.
c=27-23=4=22∙1, c1=1, a1=23, b1=1.
c=23-1=22=21∙11, c1=11, a1=11, b1=1.
c=11-1=10=21∙5, c1=5, a1=5, b1=1.
c=5-1=4=22∙1, c1=1, a1=1, b1=1.
Ответ: НОД(154,246)=2k∙b1=21∙1=2.
б) a = 83, b = 449.
Решение:
83=20∙83, k1=0; 449=20∙449, k2=0.
=> k=min(k1,k2)=0, a1=max(449,83)=449, b1=min(449,83)=83.
c=449-83=366=21∙183, c1=183, a1=max(b1,c1)=183, b1=min(b1,c1)=83.
c=183-83=100=22∙25, c1=25, a1=83, b1=25.
c=83-25=58=21∙29, c1=29, a1=29, b1=25.
c=29-25=4=22∙1, c1=1, a1=25, b1=1.
c=25-1=24=23∙3, c1=3, a1=3, b1=1.
c=3-1=2=21∙1, c1=1, a1=1, b1=1.
Ответ: НОД(83,449)=2k∙b1=20∙1=1.
3. Модуль ASIMP.
Данный модуль выполняет задания, основанные на асимптотическом
законе распределения простых чисел. Для генерации заданий и решений,
необходимо указать нужный вариант задания и ввести параметры,
определяющие сложность и количество заданий, а так же указать место, где
буду сохранены текстовые файлы, сгенерированные в результате работы
модуля.
На рисунке 7 представлен интерфейс модуля ASIMP.
38
Рисунок 7
Модуль имеет следующие параметры:
 Вариант задания
o Определяет вид задания.
o Во втором и третьем вариантах имеются дополнительные
параметры для выбираемых чисел:
 выбираются нечетные числа;
 выбираются не кратные 3-м числа.
 a[min, max]
o Параметр а – это нижняя граница диапазона чисел.
o min и max – нижняя и верхняя границы диапазона чисел
используемых для генерации значения параметра a.
o Может быть только целым положительным числом.
o Значение по умолчанию – от 500 до 5000.
o Минимальное возможное значение – 100.
o Максимальное возможное значение – 10000.
 d[min, max]
o Параметр d – это длина диапазона чисел (b = a + d).
o min и max – нижняя и верхняя границы диапазона чисел
используемых для генерации значения параметра d.
39
o Может быть только целым положительным числом.
o Значение по умолчанию – от 10000 до 50000.
o Минимальное возможное значение – 1000.
o Максимальное возможное значение – 1000000.
 Сохранить в
o Это место, куда будут сохранены сгенерированные файлы
задания и решения.
o Значение по умолчанию – место, откуда был запущен
данный модуль.
o Для выбора места сохранения нужно нажать на кнопку с
тремя точками.
 Кол-во заданий
o Это количество заданий, которые будут сгенерированы в
результате работы модуля.
o Может быть только целым положительным числом.
o Значение по умолчанию – 5.
o Минимальное возможное значение – 1.
o Максимальное возможное значение – 29.
После ввода всех параметров, следует нажать на кнопку ОК. Модуль
сгенерирует файлы и сохранит их в указанном месте, после чего появится
информационное сообщение о готовности файлов и месте их сохранения, как
это показано на рисунке 5(стр.32).
Пример работы модуля ASIMP.
Установлены следующие входные параметры:
 вариант задания – определить примерное количество простых
чисел в диапазоне от a до b;
 a = от 500 до 5000;
 d = от 10000 до 50000;
 количество заданий – 2.
40
Содержание сгенерированного файла с заданиями:
Определить примерное количество простых чисел в диапазоне от a до
b, где:
а) a = 4900, b = 33000;
б) a = 4500, b = 21000.
Содержание сгенерированного файла с решениями:
Определить примерное количество простых чисел в диапазоне от a до
b, где:
а) a = 4900, b = 33000.
Решение:
Примерное количество простых чисел в диапазоне от 4900 до 33000
есть
K = π(b) - π(a) = b/ln(b) - a/ln(a) ≈ 2595,1.
Ответ: K ≈ 2595,1.
б) a = 4500, b = 21000.
Решение:
Примерное количество простых чисел в диапазоне от 4500 до 21000
есть
K = π(b) - π(a) = b/ln(b) - a/ln(a) ≈ 1575,11.
Ответ: K ≈ 1575,11.
Установлены следующие входные параметры:
 вариант задания – какова вероятность того, что наугад
выбранное нечетное число из диапазона от a до b будет
простым;
 a = от 500 до 5000;
 d = от 10000 до 50000;
 количество заданий – 2.
Содержание сгенерированного файла с заданиями:
Какова вероятность того, что наугад выбранное нечетное число из
диапазона от a до b будет простым, если:
а) a = 1300, b = 42000;
б) a = 2400, b = 37000.
Содержание сгенерированного файла с решениями:
Какова вероятность того, что наугад выбранное нечетное число из
диапазона от a до b будет простым, если:
а) a = 1300, b = 42000.
Решение:
41
Примерное количество простых чисел в диапазоне от 1300 до 42000
есть
K = π(b) - π(a) = b/ln(b) - a/ln(a) ≈ 3764,05.
Количество чисел, больших 1300 и меньших 42000, есть 40700. Доля
нечетных чисел есть 1/2. Тогда всего перебирается чисел 20350.
Вероятность случайного выбора простого числа есть
P = 3764,05 / 20350 ≈ 0,18.
Ответ: P ≈ 0,18.
б) a = 2400, b = 37000.
Решение:
Примерное количество простых чисел в диапазоне от 2400 до 37000
есть
K = π(b) - π(a) = b/ln(b) - a/ln(a) ≈ 3209,2.
Количество чисел, больших 2400 и меньших 37000, есть 34600. Доля
нечетных чисел есть 1/2. Тогда всего перебирается чисел 17300.
Вероятность случайного выбора простого числа есть
P = 3209,2 / 17300 ≈ 0,19.
Ответ: P ≈ 0,19.
Установлены следующие входные параметры:
 вариант задания – Сколько чисел из диапазона от a до b следует
перебрать, чтобы с вероятностью не менее p получить хотя бы
одно
простое?
(перебранные
числа
не
исключаются
из
множества перебора);
 a = от 500 до 5000;
 d = от 10000 до 50000;
 количество заданий – 2.
Содержание сгенерированного файла с заданиями:
Сколько чисел из диапазона от a до b следует перебрать, чтобы с
вероятностью не менее p получить хотя бы одно простое?
(перебранные числа не исключаются из множества перебора).
а) a = 3200, b = 24000, p = 0,7;
б) a = 4400, b = 38000, p = 0,995.
Содержание сгенерированного файла с решениями:
Сколько чисел из диапазона от a до b следует перебрать, чтобы с
вероятностью не менее p получить хотя бы одно простое?
(перебранные числа не исключаются из множества перебора).
а) a = 3200, b = 24000, p = 0,7.
42
Решение:
Примерное количество простых чисел в диапазоне от 3200 до 24000
есть
K = π(b) - π(a) = b/ln(b) - a/ln(a) ≈ 1983,1.
Количество чисел, больших 3200 и меньших 24000, есть 20800.
Вероятность случайного выбора простого числа есть
P = 1983,1 / 20800 ≈ 0,1.
Вероятность достичь успеха хотя бы в одном из n испытаний есть
1-(1-P)n ≥ p. Тогда n ≥ log(1-P)(1-p), т.е n ≥ ln(1-p) / ln(1-P) ≥ 12,02 =>
n=13.
Ответ: требуется 13 испытаний.
б) a = 4400, b = 38000, p = 0,995.
Решение:
Примерное количество простых чисел в диапазоне от 4400 до 38000
есть
K = π(b) - π(a) = b/ln(b) - a/ln(a) ≈ 3079,01.
Количество чисел, больших 4400 и меньших 38000, есть 33600.
Вероятность случайного выбора простого числа есть
P = 3079,01 / 33600 ≈ 0,09.
Вероятность достичь успеха хотя бы в одном из n испытаний есть
1-(1-P)n ≥ p. Тогда n ≥ log(1-P)(1-p), т.е n ≥ ln(1-p) / ln(1-P) ≥ 55,13 =>
n=56.
Ответ: требуется 56 испытаний.
43
Приложение 2. Документация программиста.
1. Class NOD.
const int ERROR = 0;
const int VYICHET = 1;
const int DELENIE = 2;
const int BINAR = 3;
char[] abv = { 'а', 'б', 'в', 'г', 'д', 'е', 'ж', 'з', 'и', 'к', 'л', 'м', 'н', 'о', 'п', 'р', 'с', 'т',
'у', 'ф', 'х', 'ц', 'ч', 'ш', 'щ', 'ы', 'э', 'ю', 'я'};
Calc (string t_a1, string t_a2, string t_b1, string t_b2, string t_kol, string
t_rb1, string t_rb2, string t_rb3)
t_a1 – нижняя граница рандома для числа a.
t_a2 – верхняя граница рандома для числа a.
t_b1 – нижняя граница рандома для числа b.
t_b2 – верхняя граница рандома для числа b.
t_kol – количество заданий.
t_rb1 – алгоритм Евклида с вычитанием.
t_rb2 – алгоритм Евклида с делением с остатком.
t_rb3 – бинарный алгоритм Евклида.
Данная процедура выполняет проверку на корректность введенных
параметров, переданных с формы, и запускает процедуру генерации файлов
используя выбранный алгоритм Евклида.
44
Рисунок 8 Calc
45
Рисунок 9 Calc
46
Рисунок 10 Calc
Рисунок 11 Calc
NOD_VYICHET(int a1, int a2, int b1, int b2, int count, string path)
int a1 – нижняя граница рандома для числа a.
int a2 – верхняя граница рандома для числа a.
int b1 – нижняя граница рандома для числа b.
int b2 – верхняя граница рандома для числа b.
int count – количество заданий.
string path – место для сохранения файлов.
Генерирует файлы используя для решения алгоритм Евклида с
вычитанием.
47
Рисунок 12 NOD_VYICHET
48
Рисунок 13 NOD_VYICHET
49
Рисунок 14 NOD_VYICHET
Рисунок 15 NOD_VYICHET
50
NOD_DELENIE(int a1, int a2, int b1, int b2, int count, string path)
int a1 – нижняя граница рандома для числа a.
int a2 – верхняя граница рандома для числа a.
int b1 – нижняя граница рандома для числа b.
int b2 – верхняя граница рандома для числа b.
int count – количество заданий.
string path – место для сохранения файлов.
Генерирует файлы используя для решения алгоритм Евклида с
делением с остатком.
Рисунок 16 NOD_DELENIE
51
Рисунок 17 NOD_DELENIE
Рисунок 18 NOD_DELENIE
52
Рисунок 19 NOD_DELENIE
NOD_BINAR(int a1, int a2, int b1, int b2, int count, string path)
int a1 – нижняя граница рандома для числа a.
int a2 – верхняя граница рандома для числа a.
int b1 – нижняя граница рандома для числа b.
int b2 – верхняя граница рандома для числа b.
int count – количество заданий.
string path – место для сохранения файлов.
Генерирует файлы используя для решения бинарный алгоритм
Евклида.
53
Рисунок 20 NOD_BINAR
54
Рисунок 21 NOD_BINAR
55
Рисунок 22 NOD_BINAR
Рисунок 23 NOD_BINAR
56
insertStepen(string stepen, string s)
string stepen – надстрочный текст.
string s – обычный текст.
вставляет сначала надстрочный текст, затем обычный.
Рисунок 24 insertStepen
insertPodstrok(string podstrok, string s)
string podstrok – надстрочный текст.
string s – обычный текст.
вставляет сначала подстрочный текст, затем обычный текст.
Рисунок 25 insertPodstrok
57
KKK(int ch) – выделяет степень двойки числа.
Рисунок 26 KKK
metod_NOD(string t_rb1, string t_rb2, string t_rb3)
Рисунок 27 metod_NOD
58
2. Class ASIMP.
Calc(string t_a1, string t_a2, string t_d1, string t_d2, string t_kol, string
t_rb1, string t_rb2, string t_rb3, string t_f2_ch2, string t_f2_ch3, string t_f3_ch2,
string t_f3_ch3)
t_a1 – нижняя граница рандома для числа a.
t_a2 – верхняя граница рандома для числа a.
t_d1 – нижняя граница рандома для числа d.
t_d2 – верхняя граница рандома для числа d.
t_kol – количество заданий.
t_rb1, t_rb2, t_rb3 – вариант задания.
t_f2_ch2, t_f2_ch3, t_f3_ch2, t_f3_ch3 – нечетность, не кратность 3-м.
Рисунок 28 Calc
59
Рисунок 29 Calc
Рисунок 30 Calc
ASIMPTO1(int a_min, int a_max, int d_min, int d_max, int count, string
path)
Выполняет задание: определить примерное количество простых чисел в
диапазоне от a до b.
60
Рисунок 31 ASIMPTO1
61
Рисунок 32 ASIMPTO1
ASIMPTO2(int a_min, int a_max, int d_min, int d_max, bool ch2, bool ch3,
int count, string path)
Выполняет задание: какова вероятность того, что наугад выбранное
число из диапазаона от a до b будет простым?
int a_min - нижняя граница рандома для числа a.
int a_max - верхняя граница рандома для числа a.
int d_min - нижняя граница рандома для числа d.
int d_max - верхняя граница рандома для числа d.
bool ch2 – флаг четности числа.
bool ch3 – флаг кратности 3-м.
int count – количестко заданий.
string path – место для сохранения файлов.
62
Рисунок 33 ASIMPTO2
63
Рисунок 34 ASIMPTO2
64
Рисунок 35 ASIMPTO2
ASIMPTO3(int a_min, int a_max, int d_min, int d_max, bool ch2, bool ch3,
int count, string path)
int a_min - нижняя граница рандома для числа a.
int a_max - верхняя граница рандома для числа a.
int d_min - нижняя граница рандома для числа d.
int d_max - верхняя граница рандома для числа d.
bool ch2 – флаг четности числа.
bool ch3 – флаг кратности 3-м.
int count – количестко заданий.
string path – место для сохранения файлов.
Выполняет задание: сколько чисел из диапазаона от a до b следует
перебрать, чтобы с вероятностью не менее P получить хотябы одно простое
(перебранные числа не исключаются из множества перебора)
65
Рисунок 36 ASIMPTO3
66
Рисунок 37 ASIMPTO3
67
Рисунок 38 ASIMPTO3
lastNum0(int k)
Округляет число в меньшую сторону, до круглого значения, в
зависимости от количества символов в этом числе.
68
Рисунок 39 lastNum0
lastCharIE(string n)
n – число, предшествующее склоняемому слову.
Правильно склоняет слово, в зависимости от предшествующего ему
числа.
69
Рисунок 40 lastCharIE
checkBOXer(string chb)
взвращает логическое значение, определяющее флаг checkbox’a.
70
Рисунок 41 checkBOXer
variant (string t_rb1, string t_rb2, string t_rb3)
Возвращает числовое значение выбранного варианта задания.
Рисунок 42 variant
71
Приложение 3. Примеры работы модулей.
1. Модуль NOD.
1.1. Алгоритм Евклида с вычитанием.
Вычислить НОД(a,b) при помощи алгоритма Евклида с использованием
вычитания, где:
а) a = 456, b = 170;
б) a = 668, b = 321;
в) a = 997, b = 388;
г) a = 494, b = 604;
д) a = 706, b = 668.
Вычислить НОД(a,b) при помощи алгоритма Евклида с использованием
вычитания, где:
а) a = 456, b = 170.
Решение:
a
b
6
8
456
170
8
6
286
170
2
6
116
170
6
2
170
116
4
2
54
116
2
2
116
54
62
54
8
54
54
8
46
8
38
8
30
8
22
8
14
8
269
26
1
8
243
26
217
26
191
26
165
26
139
26
113
26
87
26
61
26
221
167
9
5
54
167
4
5
167
54
5
4
113
54
1
4
59
54
5
54
54
5
49
5
44
5
274
110
36
164
110
34
54
110
32
110
54
30
56
54
28
2
54
26
54
2
24
52
2
22
50
2
20
Ответ: НОД(456,170)=2.
б) a = 668, b = 321.
Решение:
a
b
35
26
668
321
9
26
347
321
26
9
26
321
17
9
321
26
8
9
295
26
9
8
Ответ: НОД(668,321)=1.
в) a = 997, b = 388.
Решение:
a
b
39
5
997
388
34
5
609
388
29
5
221
388
24
5
388
221
19
5
167
221
14
5
Ответ: НОД(997,388)=1.
г) a = 494, b = 604.
Решение:
a
b
48
494
604
46
604
494
44
110
494
42
494
110
40
384
110
38
72
2
18
2
2
16
2
2
14
2
2
12
2
2
10
2
2
8
2
2
6
2
2
4
2
2
2
2
2
2
2
2
2
2
554
38
38
22
516
38
16
22
478
38
22
16
440
38
6
16
402
38
16
6
364
38
10
6
326
38
4
6
288
38
6
4
250
38
2
4
Ответ: НОД(494,604)=2.
д) a = 706, b = 668.
Решение:
a
b
212
38
4
2
706
668
174
38
2
2
38
668
136
38
668
38
98
38
630
38
60
38
592
38
22
38
Ответ: НОД(706,668)=2.
1.2. Алгоритм Евклида с делением с остатком.
Вычислить НОД(a,b) при помощи алгоритма Евклида с использованием
деления с остатком, где:
а) a = 674, b = 361;
б) a = 721, b = 621;
в) a = 540, b = 457;
г) a = 602, b = 599;
д) a = 828, b = 835.
Вычислить НОД(a,b) при помощи алгоритма Евклида с использованием
деления с остатком, где:
а) a = 674, b = 361.
Решение:
a
b
674
361
361
313
313
48
48
25
25
23
23
2
2
1
674=1∙361+313
361=1∙313+48
313=6∙48+25
48=1∙25+23
25=1∙23+2
23=11∙2+1
2=2∙1+0
Ответ: НОД(674,361)=1.
б) a = 721, b = 621.
Решение:
73
a
b
721
621
621
100
100
21
21
16
16
5
5
1
721=1∙621+100
621=6∙100+21
100=4∙21+16
21=1∙16+5
16=3∙5+1
5=5∙1+0
Ответ: НОД(721,621)=1.
в) a = 540, b = 457.
Решение:
a
b
540
457
457
83
83
42
42
41
41
1
540=1∙457+83
457=5∙83+42
83=1∙42+41
42=1∙41+1
41=41∙1+0
Ответ: НОД(540,457)=1.
г) a = 602, b = 599.
Решение:
a
b
602
599
599
3
3
2
2
1
602=1∙599+3
599=199∙3+2
3=1∙2+1
2=2∙1+0
Ответ: НОД(602,599)=1.
д) a = 828, b = 835.
Решение:
a
b
828
835
835
828
828
7
7
2
2
1
828=0∙835+828
835=1∙828+7
828=118∙7+2
74
7=3∙2+1
2=2∙1+0
Ответ: НОД(828,835)=1.
1.3. Бинарный алгоритм Евклида.
Вычислить НОД(a,b) при помощи бинарного алгоритма Евклида, где:
а) a = 665, b = 163;
б) a = 153, b = 765;
в) a = 814, b = 661;
г) a = 508, b = 274;
д) a = 210, b = 836.
Вычислить НОД(a,b) при помощи бинарного алгоритма Евклида, где:
а) a = 665, b = 163.
Решение:
665=20∙665, k1=0; 163=20∙163, k2=0.
=> k=min(k1,k2)=0, a1=max(665,163)=665, b1=min(665,163)=163.
c=665-163=502=21∙251,
c1=251,
a1=max(b1,c1)=251,
b1=min(b1,c1)=163.
c=251-163=88=23∙11, c1=11, a1=163, b1=11.
c=163-11=152=23∙19, c1=19, a1=19, b1=11.
c=19-11=8=23∙1, c1=1, a1=11, b1=1.
c=11-1=10=21∙5, c1=5, a1=5, b1=1.
c=5-1=4=22∙1, c1=1, a1=1, b1=1.
Ответ: НОД(665,163)=2k∙b1=20∙1=1.
б) a = 153, b = 765.
Решение:
153=20∙153, k1=0; 765=20∙765, k2=0.
=> k=min(k1,k2)=0, a1=max(765,153)=765, b1=min(765,153)=153.
c=765-153=612=22∙153,
c1=153,
a1=max(b1,c1)=153,
b1=min(b1,c1)=153.
Ответ: НОД(153,765)=2k∙b1=20∙153=153.
75
в) a = 814, b = 661.
Решение:
814=21∙407, k1=1; 661=20∙661, k2=0.
=> k=min(k1,k2)=0, a1=max(661,407)=661, b1=min(661,407)=407.
c=661-407=254=21∙127,
c1=127,
a1=max(b1,c1)=407,
b1=min(b1,c1)=127.
c=407-127=280=23∙35, c1=35, a1=127, b1=35.
c=127-35=92=22∙23, c1=23, a1=35, b1=23.
c=35-23=12=22∙3, c1=3, a1=23, b1=3.
c=23-3=20=22∙5, c1=5, a1=5, b1=3.
c=5-3=2=21∙1, c1=1, a1=3, b1=1.
c=3-1=2=21∙1, c1=1, a1=1, b1=1.
Ответ: НОД(814,661)=2k∙b1=20∙1=1.
г) a = 508, b = 274.
Решение:
508=22∙127, k1=2; 274=21∙137, k2=1.
=> k=min(k1,k2)=1, a1=max(137,127)=137, b1=min(137,127)=127.
c=137-127=10=21∙5, c1=5, a1=max(b1,c1)=127, b1=min(b1,c1)=5.
c=127-5=122=21∙61, c1=61, a1=61, b1=5.
c=61-5=56=23∙7, c1=7, a1=7, b1=5.
c=7-5=2=21∙1, c1=1, a1=5, b1=1.
c=5-1=4=22∙1, c1=1, a1=1, b1=1.
Ответ: НОД(508,274)=2k∙b1=21∙1=2.
д) a = 210, b = 836.
Решение:
210=21∙105, k1=1; 836=22∙209, k2=2.
=> k=min(k1,k2)=1, a1=max(209,105)=209, b1=min(209,105)=105.
c=209-105=104=23∙13, c1=13, a1=max(b1,c1)=105, b1=min(b1,c1)=13.
c=105-13=92=22∙23, c1=23, a1=23, b1=13.
c=23-13=10=21∙5, c1=5, a1=13, b1=5.
76
c=13-5=8=23∙1, c1=1, a1=5, b1=1.
c=5-1=4=22∙1, c1=1, a1=1, b1=1.
Ответ: НОД(210,836)=2k∙b1=21∙1=2.
2. Модуль ASIMP.
2.1. Определить примерное количество простых чисел в диапазоне
от a до b.
Определить примерное количество простых чисел в диапазоне от a до
b, где:
а) a = 1100, b = 16000;
б) a = 4600, b = 35000;
в) a = 4400, b = 34000;
г) a = 2400, b = 13000;
д) a = 2800, b = 52000.
Определить примерное количество простых чисел в диапазоне от a до
b, где:
а) a = 1100, b = 16000.
Решение:
Примерное количество простых чисел в диапазоне от 1100 до 16000
есть
K = π(b) - π(a) = b/ln(b) - a/ln(a) ≈ 1495,76.
Ответ: K ≈ 1495,76.
б) a = 4600, b = 35000.
Решение:
Примерное количество простых чисел в диапазоне от 4600 до 35000
есть
K = π(b) - π(a) = b/ln(b) - a/ln(a) ≈ 2799,66.
Ответ: K ≈ 2799,66.
в) a = 4400, b = 34000.
Решение:
77
Примерное количество простых чисел в диапазоне от 4400 до 34000
есть
K = π(b) - π(a) = b/ln(b) - a/ln(a) ≈ 2734,07.
Ответ: K ≈ 2734,07.
г) a = 2400, b = 13000.
Решение:
Примерное количество простых чисел в диапазоне от 2400 до 13000
есть
K = π(b) - π(a) = b/ln(b) - a/ln(a) ≈ 1064,01.
Ответ: K ≈ 1064,01.
д) a = 2800, b = 52000.
Решение:
Примерное количество простых чисел в диапазоне от 2800 до 52000
есть
K = π(b) - π(a) = b/ln(b) - a/ln(a) ≈ 4435,89.
Ответ: K ≈ 4435,89.
2.2. Какова вероятность того, что наугад выбранное число из
диапазона от a до b будет простым.
Какова вероятность того, что наугад выбранное число из диапазона
от a до b будет простым, если:
а) a = 2000, b = 19000;
б) a = 3800, b = 41000;
в) a = 510, b = 22000;
г) a = 3500, b = 25000;
д) a = 3700, b = 32000.
Какова вероятность того, что наугад выбранное число из диапазона
от a до b будет простым, если:
а) a = 2000, b = 19000.
Решение:
78
Примерное количество простых чисел в диапазоне от 2000 до 19000
есть
K = π(b) - π(a) = b/ln(b) - a/ln(a) ≈ 1665,38.
Количество чисел, больших 2000 и меньших 19000, есть 17000.
Вероятность случайного выбора простого числа есть
P = 1665,38 / 17000 ≈ 0,1.
Ответ: P ≈ 0,1.
б) a = 3800, b = 41000.
Решение:
Примерное количество простых чисел в диапазоне от 3800 до 41000
есть
K = π(b) - π(a) = b/ln(b) - a/ln(a) ≈ 3399,15.
Количество чисел, больших 3800 и меньших 41000, есть 37200.
Вероятность случайного выбора простого числа есть
P = 3399,15 / 37200 ≈ 0,09.
Ответ: P ≈ 0,09.
в) a = 510, b = 22000.
Решение:
Примерное количество простых чисел в диапазоне от 510 до 22000
есть
K = π(b) - π(a) = b/ln(b) - a/ln(a) ≈ 2118,46.
Количество чисел, больших 510 и меньших 22000, есть 21490.
Вероятность случайного выбора простого числа есть
P = 2118,46 / 21490 ≈ 0,1.
Ответ: P ≈ 0,1.
г) a = 3500, b = 25000.
Решение:
Примерное количество простых чисел в диапазоне от 3500 до 25000
есть
K = π(b) - π(a) = b/ln(b) - a/ln(a) ≈ 2039,84.
79
Количество чисел, больших 3500 и меньших 25000, есть 21500.
Вероятность случайного выбора простого числа есть
P = 2039,84 / 21500 ≈ 0,09.
Ответ: P ≈ 0,09.
д) a = 3700, b = 32000.
Решение:
Примерное количество простых чисел в диапазоне от 3700 до 32000
есть
K = π(b) - π(a) = b/ln(b) - a/ln(a) ≈ 2634,45.
Количество чисел, больших 3700 и меньших 32000, есть 28300.
Вероятность случайного выбора простого числа есть
P = 2634,45 / 28300 ≈ 0,09.
Ответ: P ≈ 0,09.
2.3. Какова вероятность того, что наугад выбранное нечетное
число из диапазона от a до b будет простым.
Какова вероятность того, что наугад выбранное нечетное число из
диапазона от a до b будет простым, если:
а) a = 2600, b = 31000;
б) a = 590, b = 23000;
в) a = 4900, b = 52000;
г) a = 3700, b = 20000;
д) a = 3800, b = 21000.
Какова вероятность того, что наугад выбранное нечетное число из
диапазона от a до b будет простым, если:
а) a = 2600, b = 31000.
Решение:
Примерное количество простых чисел в диапазоне от 2600 до 31000
есть
K = π(b) - π(a) = b/ln(b) - a/ln(a) ≈ 2666,91.
80
Количество чисел, больших 2600 и меньших 31000, есть 28400. Доля
нечетных чисел есть 1/2. Тогда всего перебирается чисел 14200.
Вероятность случайного выбора простого числа есть
P = 2666,91 / 14200 ≈ 0,19.
Ответ: P ≈ 0,19.
б) a = 590, b = 23000.
Решение:
Примерное количество простых чисел в диапазоне от 590 до 23000
есть
K = π(b) - π(a) = b/ln(b) - a/ln(a) ≈ 2197,62.
Количество чисел, больших 590 и меньших 23000, есть 22410. Доля
нечетных чисел есть 1/2. Тогда всего перебирается чисел 11205.
Вероятность случайного выбора простого числа есть
P = 2197,62 / 11205 ≈ 0,2.
Ответ: P ≈ 0,2.
в) a = 4900, b = 52000.
Решение:
Примерное количество простых чисел в диапазоне от 4900 до 52000
есть
K = π(b) - π(a) = b/ln(b) - a/ln(a) ≈ 4211,98.
Количество чисел, больших 4900 и меньших 52000, есть 47100. Доля
нечетных чисел есть 1/2. Тогда всего перебирается чисел 23550.
Вероятность случайного выбора простого числа есть
P = 4211,98 / 23550 ≈ 0,18.
Ответ: P ≈ 0,18.
г) a = 3700, b = 20000.
Решение:
Примерное количество простых чисел в диапазоне от 3700 до 20000
есть
K = π(b) - π(a) = b/ln(b) - a/ln(a) ≈ 1569,15.
81
Количество чисел, больших 3700 и меньших 20000, есть 16300. Доля
нечетных чисел есть 1/2. Тогда всего перебирается чисел 8150. Вероятность
случайного выбора простого числа есть
P = 1569,15 / 8150 ≈ 0,19.
Ответ: P ≈ 0,19.
д) a = 3800, b = 21000.
Решение:
Примерное количество простых чисел в диапазоне от 3800 до 21000
есть
K = π(b) - π(a) = b/ln(b) - a/ln(a) ≈ 1649,06.
Количество чисел, больших 3800 и меньших 21000, есть 17200. Доля
нечетных чисел есть 1/2. Тогда всего перебирается чисел 8600. Вероятность
случайного выбора простого числа есть
P = 1649,06 / 8600 ≈ 0,19.
Ответ: P ≈ 0,19.
2.4. Какова вероятность того, что наугад выбранное не кратное 3-м
число из диапазона от a до b будет простым.
Какова вероятность того, что наугад выбранное не кратное 3-м число
из диапазона от a до b будет простым, если:
а) a = 3400, b = 30000;
б) a = 4300, b = 37000;
в) a = 3100, b = 39000;
г) a = 1500, b = 15000;
д) a = 1500, b = 41000.
Какова вероятность того, что наугад выбранное не кратное 3-м число
из диапазона от a до b будет простым, если:
а) a = 3400, b = 30000.
Решение:
Примерное количество простых чисел в диапазоне от 3400 до 30000
есть
82
K = π(b) - π(a) = b/ln(b) - a/ln(a) ≈ 2491,97.
Количество чисел, больших 3400 и меньших 30000, есть 26600. Доля
не кратных 3-м чисел есть 2/3. Тогда всего перебирается чисел 17733,33.
Вероятность случайного выбора простого числа есть
P = 2491,97 / 17733,33 ≈ 0,14.
Ответ: P ≈ 0,14.
б) a = 4300, b = 37000.
Решение:
Примерное количество простых чисел в диапазоне от 4300 до 37000
есть
K = π(b) - π(a) = b/ln(b) - a/ln(a) ≈ 3003,59.
Количество чисел, больших 4300 и меньших 37000, есть 32700. Доля
не кратных 3-м чисел есть 2/3. Тогда всего перебирается чисел 21800.
Вероятность случайного выбора простого числа есть
P = 3003,59 / 21800 ≈ 0,14.
Ответ: P ≈ 0,14.
в) a = 3100, b = 39000.
Решение:
Примерное количество простых чисел в диапазоне от 3100 до 39000
есть
K = π(b) - π(a) = b/ln(b) - a/ln(a) ≈ 3303,62.
Количество чисел, больших 3100 и меньших 39000, есть 35900. Доля
не кратных 3-м чисел есть 2/3. Тогда всего перебирается чисел 23933,33.
Вероятность случайного выбора простого числа есть
P = 3303,62 / 23933,33 ≈ 0,14.
Ответ: P ≈ 0,14.
г) a = 1500, b = 15000.
Решение:
Примерное количество простых чисел в диапазоне от 1500 до 15000
есть
83
K = π(b) - π(a) = b/ln(b) - a/ln(a) ≈ 1354,82.
Количество чисел, больших 1500 и меньших 15000, есть 13500. Доля
не кратных 3-м чисел есть 2/3. Тогда всего перебирается чисел 9000.
Вероятность случайного выбора простого числа есть
P = 1354,82 / 9000 ≈ 0,15.
Ответ: P ≈ 0,15.
д) a = 1500, b = 41000.
Решение:
Примерное количество простых чисел в диапазоне от 1500 до 41000
есть
K = π(b) - π(a) = b/ln(b) - a/ln(a) ≈ 3655,05.
Количество чисел, больших 1500 и меньших 41000, есть 39500. Доля
не кратных 3-м чисел есть 2/3. Тогда всего перебирается чисел 26333,33.
Вероятность случайного выбора простого числа есть
P = 3655,05 / 26333,33 ≈ 0,14.
Ответ: P ≈ 0,14.
2.5. Какова вероятность того, что наугад выбранное нечетное и не
кратное 3-м число из диапазона от a до b будет простым.
Какова вероятность того, что наугад выбранное нечетное и не
кратное 3-м число из диапазона от a до b будет простым, если:
а) a = 1500, b = 25000;
б) a = 1300, b = 34000;
в) a = 2600, b = 36000;
г) a = 2300, b = 46000;
д) a = 4200, b = 18000.
Какова вероятность того, что наугад выбранное нечетное и не
кратное 3-м число из диапазона от a до b будет простым, если:
а) a = 1500, b = 25000.
Решение:
84
Примерное количество простых чисел в диапазоне от 1500 до 25000
есть
K = π(b) - π(a) = b/ln(b) - a/ln(a) ≈ 2263,63.
Количество чисел, больших 1500 и меньших 25000, есть 23500. Доля
нечетных и не кратных 3-м чисел есть 1/3. Тогда всего перебирается чисел
7833,33. Вероятность случайного выбора простого числа есть
P = 2263,63 / 7833,33 ≈ 0,29.
Ответ: P ≈ 0,29.
б) a = 1300, b = 34000.
Решение:
Примерное количество простых чисел в диапазоне от 1300 до 34000
есть
K = π(b) - π(a) = b/ln(b) - a/ln(a) ≈ 3077,23.
Количество чисел, больших 1300 и меньших 34000, есть 32700. Доля
нечетных и не кратных 3-м чисел есть 1/3. Тогда всего перебирается чисел
10900. Вероятность случайного выбора простого числа есть
P = 3077,23 / 10900 ≈ 0,28.
Ответ: P ≈ 0,28.
в) a = 2600, b = 36000.
Решение:
Примерное количество простых чисел в диапазоне от 2600 до 36000
есть
K = π(b) - π(a) = b/ln(b) - a/ln(a) ≈ 3100,77.
Количество чисел, больших 2600 и меньших 36000, есть 33400. Доля
нечетных и не кратных 3-м чисел есть 1/3. Тогда всего перебирается чисел
11133,33. Вероятность случайного выбора простого числа есть
P = 3100,77 / 11133,33 ≈ 0,28.
Ответ: P ≈ 0,28.
г) a = 2300, b = 46000.
Решение:
85
Примерное количество простых чисел в диапазоне от 2300 до 46000
есть
K = π(b) - π(a) = b/ln(b) - a/ln(a) ≈ 3987,36.
Количество чисел, больших 2300 и меньших 46000, есть 43700. Доля
нечетных и не кратных 3-м чисел есть 1/3. Тогда всего перебирается чисел
14566,67. Вероятность случайного выбора простого числа есть
P = 3987,36 / 14566,67 ≈ 0,27.
Ответ: P ≈ 0,27.
д) a = 4200, b = 18000.
Решение:
Примерное количество простых чисел в диапазоне от 4200 до 18000
есть
K = π(b) - π(a) = b/ln(b) - a/ln(a) ≈ 1333,66.
Количество чисел, больших 4200 и меньших 18000, есть 13800. Доля
нечетных и не кратных 3-м чисел есть 1/3. Тогда всего перебирается чисел
4600. Вероятность случайного выбора простого числа есть
P = 1333,66 / 4600 ≈ 0,29.
Ответ: P ≈ 0,29.
2.6. Сколько чисел из диапазона от a до b следует перебрать, чтобы
с вероятностью не менее p получить хотя бы одно простое?
(перебранные числа не исключаются из множества перебора).
Сколько чисел из диапазона от a до b следует перебрать, чтобы с
вероятностью не менее p получить хотя бы одно простое? (перебранные
числа не исключаются из множества перебора).
а) a = 4400, b = 32000, p = 0,7;
б) a = 600, b = 41000, p = 0,99;
в) a = 3500, b = 43000, p = 0,93;
г) a = 1600, b = 49000, p = 0,5;
д) a = 1000, b = 34000, p = 0,8.
86
Сколько чисел из диапазона от a до b следует перебрать, чтобы с
вероятностью не менее p получить хотя бы одно простое? (перебранные
числа не исключаются из множества перебора).
а) a = 4400, b = 32000, p = 0,7.
Решение:
Примерное количество простых чисел в диапазоне от 4400 до 32000
есть
K = π(b) - π(a) = b/ln(b) - a/ln(a) ≈ 2560,31.
Количество чисел, больших 4400 и меньших 32000, есть 27600.
Вероятность случайного выбора простого числа есть
P = 2560,31 / 27600 ≈ 0,09.
Вероятность достичь успеха хотя бы в одном из n испытаний есть
1-(1-P)n ≥ p. Тогда n ≥ log(1-P)(1-p), т.е n ≥ ln(1-p) / ln(1-P) ≥ 12,37 => n=13.
Ответ: требуется 13 испытаний.
б) a = 600, b = 41000, p = 0,99.
Решение:
Примерное количество простых чисел в диапазоне от 600 до 41000
есть
K = π(b) - π(a) = b/ln(b) - a/ln(a) ≈ 3766,36.
Количество чисел, больших 600 и меньших 41000, есть 40400.
Вероятность случайного выбора простого числа есть
P = 3766,36 / 40400 ≈ 0,09.
Вероятность достичь успеха хотя бы в одном из n испытаний есть
1-(1-P)n ≥ p. Тогда n ≥ log(1-P)(1-p), т.е n ≥ ln(1-p) / ln(1-P) ≥ 47,06 => n=48.
Ответ: требуется 48 испытаний.
в) a = 3500, b = 43000, p = 0,93.
Решение:
Примерное количество простых чисел в диапазоне от 3500 до 43000
есть
K = π(b) - π(a) = b/ln(b) - a/ln(a) ≈ 3601,49.
87
Количество чисел, больших 3500 и меньших 43000, есть 39500.
Вероятность случайного выбора простого числа есть
P = 3601,49 / 39500 ≈ 0,09.
Вероятность достичь успеха хотя бы в одном из n испытаний есть
1-(1-P)n ≥ p. Тогда n ≥ log(1-P)(1-p), т.е n ≥ ln(1-p) / ln(1-P) ≥ 27,82 => n=28.
Ответ: требуется 28 испытаний.
г) a = 1600, b = 49000, p = 0,5.
Решение:
Примерное количество простых чисел в диапазоне от 1600 до 49000
есть
K = π(b) - π(a) = b/ln(b) - a/ln(a) ≈ 4320,35.
Количество чисел, больших 1600 и меньших 49000, есть 47400.
Вероятность случайного выбора простого числа есть
P = 4320,35 / 47400 ≈ 0,09.
Вероятность достичь успеха хотя бы в одном из n испытаний есть
1-(1-P)n ≥ p. Тогда n ≥ log(1-P)(1-p), т.е n ≥ ln(1-p) / ln(1-P) ≥ 7,25 => n=8.
Ответ: требуется 8 испытаний.
д) a = 1000, b = 34000, p = 0,8.
Решение:
Примерное количество простых чисел в диапазоне от 1000 до 34000
есть
K = π(b) - π(a) = b/ln(b) - a/ln(a) ≈ 3113,78.
Количество чисел, больших 1000 и меньших 34000, есть 33000.
Вероятность случайного выбора простого числа есть
P = 3113,78 / 33000 ≈ 0,09.
Вероятность достичь успеха хотя бы в одном из n испытаний есть
1-(1-P)n ≥ p. Тогда n ≥ log(1-P)(1-p), т.е n ≥ ln(1-p) / ln(1-P) ≥ 16,24 => n=17.
Ответ: требуется 17 испытаний.
88
2.7. Сколько нечетных чисел из диапазона от a до b следует
перебрать, чтобы с вероятностью не менее p получить хотя бы одно
простое? (перебранные числа не исключаются из множества перебора).
Сколько нечетных чисел из диапазона от a до b следует перебрать,
чтобы с вероятностью не менее p получить хотя бы одно простое?
(перебранные числа не исключаются из множества перебора).
а) a = 3400, b = 14000, p = 0,75;
б) a = 1500, b = 32000, p = 0,85;
в) a = 2900, b = 36000, p = 0,93;
г) a = 850, b = 47000, p = 0,91;
д) a = 1300, b = 44000, p = 0,997.
Сколько нечетных чисел из диапазона от a до b следует перебрать,
чтобы с вероятностью не менее p получить хотя бы одно простое?
(перебранные числа не исключаются из множества перебора).
а) a = 3400, b = 14000, p = 0,75.
Решение:
Примерное количество простых чисел в диапазоне от 3400 до 14000
есть
K = π(b) - π(a) = b/ln(b) - a/ln(a) ≈ 1048,33.
Количество чисел, больших 3400 и меньших 14000, есть 10600. Доля
нечетных чисел есть 1/2. Тогда всего перебирается чисел 5300. Вероятность
случайного выбора простого числа есть
P = 1048,33 / 5300 ≈ 0,2.
Вероятность достичь успеха хотя бы в одном из n испытаний есть
1-(1-P)n ≥ p. Тогда n ≥ log(1-P)(1-p), т.е n ≥ ln(1-p) / ln(1-P) ≥ 6,29 => n=7.
Ответ: требуется 7 испытаний.
б) a = 1500, b = 32000, p = 0,85.
Решение:
Примерное количество простых чисел в диапазоне от 1500 до 32000
есть
89
K = π(b) - π(a) = b/ln(b) - a/ln(a) ≈ 2879,68.
Количество чисел, больших 1500 и меньших 32000, есть 30500. Доля
нечетных чисел есть 1/2. Тогда всего перебирается чисел 15250.
Вероятность случайного выбора простого числа есть
P = 2879,68 / 15250 ≈ 0,19.
Вероятность достичь успеха хотя бы в одном из n испытаний есть
1-(1-P)n ≥ p. Тогда n ≥ log(1-P)(1-p), т.е n ≥ ln(1-p) / ln(1-P) ≥ 9,07 => n=10.
Ответ: требуется 10 испытаний.
в) a = 2900, b = 36000, p = 0,93.
Решение:
Примерное количество простых чисел в диапазоне от 2900 до 36000
есть
K = π(b) - π(a) = b/ln(b) - a/ln(a) ≈ 3067,67.
Количество чисел, больших 2900 и меньших 36000, есть 33100. Доля
нечетных чисел есть 1/2. Тогда всего перебирается чисел 16550.
Вероятность случайного выбора простого числа есть
P = 3067,67 / 16550 ≈ 0,19.
Вероятность достичь успеха хотя бы в одном из n испытаний есть
1-(1-P)n ≥ p. Тогда n ≥ log(1-P)(1-p), т.е n ≥ ln(1-p) / ln(1-P) ≥ 12,97 => n=13.
Ответ: требуется 13 испытаний.
г) a = 850, b = 47000, p = 0,91.
Решение:
Примерное количество простых чисел в диапазоне от 850 до 47000
есть
K = π(b) - π(a) = b/ln(b) - a/ln(a) ≈ 4242,87.
Количество чисел, больших 850 и меньших 47000, есть 46150. Доля
нечетных чисел есть 1/2. Тогда всего перебирается чисел 23075.
Вероятность случайного выбора простого числа есть
P = 4242,87 / 23075 ≈ 0,18.
90
Вероятность достичь успеха хотя бы в одном из n испытаний есть
1-(1-P)n ≥ p. Тогда n ≥ log(1-P)(1-p), т.е n ≥ ln(1-p) / ln(1-P) ≥ 11,85 => n=12.
Ответ: требуется 12 испытаний.
д) a = 1300, b = 44000, p = 0,997.
Решение:
Примерное количество простых чисел в диапазоне от 1300 до 44000
есть
K = π(b) - π(a) = b/ln(b) - a/ln(a) ≈ 3933,94.
Количество чисел, больших 1300 и меньших 44000, есть 42700. Доля
нечетных чисел есть 1/2. Тогда всего перебирается чисел 21350.
Вероятность случайного выбора простого числа есть
P = 3933,94 / 21350 ≈ 0,18.
Вероятность достичь успеха хотя бы в одном из n испытаний есть
1-(1-P)n ≥ p. Тогда n ≥ log(1-P)(1-p), т.е n ≥ ln(1-p) / ln(1-P) ≥ 28,52 => n=29.
Ответ: требуется 29 испытаний.
2.8. Сколько не кратных 3-м чисел из диапазона от a до b следует
перебрать, чтобы с вероятностью не менее p получить хотя бы одно
простое? (перебранные числа не исключаются из множества перебора).
Сколько не кратных 3-м чисел из диапазона от a до b следует
перебрать, чтобы с вероятностью не менее p получить хотя бы одно
простое? (перебранные числа не исключаются из множества перебора).
а) a = 2800, b = 31000, p = 0,97;
б) a = 2800, b = 24000, p = 0,85;
в) a = 4800, b = 39000, p = 0,7;
г) a = 2900, b = 20000, p = 0,85;
д) a = 3100, b = 27000, p = 0,999.
Сколько не кратных 3-м чисел из диапазона от a до b следует
перебрать, чтобы с вероятностью не менее p получить хотя бы одно
простое? (перебранные числа не исключаются из множества перебора).
а) a = 2800, b = 31000, p = 0,97.
91
Решение:
Примерное количество простых чисел в диапазоне от 2800 до 31000
есть
K = π(b) - π(a) = b/ln(b) - a/ln(a) ≈ 2644,8.
Количество чисел, больших 2800 и меньших 31000, есть 28200. Доля
не кратных 3-м чисел есть 2/3. Тогда всего перебирается чисел 18800.
Вероятность случайного выбора простого числа есть
P = 2644,8 / 18800 ≈ 0,14.
Вероятность достичь успеха хотя бы в одном из n испытаний есть
1-(1-P)n ≥ p. Тогда n ≥ log(1-P)(1-p), т.е n ≥ ln(1-p) / ln(1-P) ≥ 23,13 => n=24.
Ответ: требуется 24 испытания.
б) a = 2800, b = 24000, p = 0,85.
Решение:
Примерное количество простых чисел в диапазоне от 2800 до 24000
есть
K = π(b) - π(a) = b/ln(b) - a/ln(a) ≈ 2026,82.
Количество чисел, больших 2800 и меньших 24000, есть 21200. Доля
не кратных 3-м чисел есть 2/3. Тогда всего перебирается чисел 14133,33.
Вероятность случайного выбора простого числа есть
P = 2026,82 / 14133,33 ≈ 0,14.
Вероятность достичь успеха хотя бы в одном из n испытаний есть
1-(1-P)n ≥ p. Тогда n ≥ log(1-P)(1-p), т.е n ≥ ln(1-p) / ln(1-P) ≥ 12,26 => n=13.
Ответ: требуется 13 испытаний.
в) a = 4800, b = 39000, p = 0,7.
Решение:
Примерное количество простых чисел в диапазоне от 4800 до 39000
есть
K = π(b) - π(a) = b/ln(b) - a/ln(a) ≈ 3122,95.
92
Количество чисел, больших 4800 и меньших 39000, есть 34200. Доля
не кратных 3-м чисел есть 2/3. Тогда всего перебирается чисел 22800.
Вероятность случайного выбора простого числа есть
P = 3122,95 / 22800 ≈ 0,14.
Вероятность достичь успеха хотя бы в одном из n испытаний есть
1-(1-P)n ≥ p. Тогда n ≥ log(1-P)(1-p), т.е n ≥ ln(1-p) / ln(1-P) ≥ 8,17 => n=9.
Ответ: требуется 9 испытаний.
г) a = 2900, b = 20000, p = 0,85.
Решение:
Примерное количество простых чисел в диапазоне от 2900 до 20000
есть
K = π(b) - π(a) = b/ln(b) - a/ln(a) ≈ 1655,74.
Количество чисел, больших 2900 и меньших 20000, есть 17100. Доля
не кратных 3-м чисел есть 2/3. Тогда всего перебирается чисел 11400.
Вероятность случайного выбора простого числа есть
P = 1655,74 / 11400 ≈ 0,15.
Вероятность достичь успеха хотя бы в одном из n испытаний есть
1-(1-P)n ≥ p. Тогда n ≥ log(1-P)(1-p), т.е n ≥ ln(1-p) / ln(1-P) ≥ 12,09 => n=13.
Ответ: требуется 13 испытаний.
д) a = 3100, b = 27000, p = 0,999.
Решение:
Примерное количество простых чисел в диапазоне от 3100 до 27000
есть
K = π(b) - π(a) = b/ln(b) - a/ln(a) ≈ 2260,51.
Количество чисел, больших 3100 и меньших 27000, есть 23900. Доля
не кратных 3-м чисел есть 2/3. Тогда всего перебирается чисел 15933,33.
Вероятность случайного выбора простого числа есть
P = 2260,51 / 15933,33 ≈ 0,14.
Вероятность достичь успеха хотя бы в одном из n испытаний есть
1-(1-P)n ≥ p. Тогда n ≥ log(1-P)(1-p), т.е n ≥ ln(1-p) / ln(1-P) ≥ 45,15 => n=46.
93
Ответ: требуется 46 испытаний.
2.9. Сколько нечетных и не кратных 3-м чисел из диапазона от a до
b следует перебрать, чтобы с вероятностью не менее p получить хотя бы
одно простое? (перебранные числа не исключаются из множества
перебора).
Сколько нечетных и не кратных 3-м чисел из диапазона от a до b
следует перебрать, чтобы с вероятностью не менее p получить хотя бы
одно простое? (перебранные числа не исключаются из множества
перебора).
а) a = 3200, b = 26000, p = 0,5;
б) a = 2800, b = 22000, p = 0,7;
в) a = 4900, b = 33000, p = 0,99;
г) a = 2300, b = 43000, p = 0,97;
д) a = 560, b = 36000, p = 0,7.
Сколько нечетных и не кратных 3-м чисел из диапазона от a до b
следует перебрать, чтобы с вероятностью не менее p получить хотя бы
одно простое? (перебранные числа не исключаются из множества
перебора).
а) a = 3200, b = 26000, p = 0,5.
Решение:
Примерное количество простых чисел в диапазоне от 3200 до 26000
есть
K = π(b) - π(a) = b/ln(b) - a/ln(a) ≈ 2161,1.
Количество чисел, больших 3200 и меньших 26000, есть 22800. Доля
нечетных и не кратных 3-м чисел есть 1/3. Тогда всего перебирается чисел
7600. Вероятность случайного выбора простого числа есть
P = 2161,1 / 7600 ≈ 0,28.
Вероятность достичь успеха хотя бы в одном из n испытаний есть
1-(1-P)n ≥ p. Тогда n ≥ log(1-P)(1-p), т.е n ≥ ln(1-p) / ln(1-P) ≥ 2,07 => n=3.
Ответ: требуется 3 испытания.
94
б) a = 2800, b = 22000, p = 0,7.
Решение:
Примерное количество простых чисел в диапазоне от 2800 до 22000
есть
K = π(b) - π(a) = b/ln(b) - a/ln(a) ≈ 1847,5.
Количество чисел, больших 2800 и меньших 22000, есть 19200. Доля
нечетных и не кратных 3-м чисел есть 1/3. Тогда всего перебирается чисел
6400. Вероятность случайного выбора простого числа есть
P = 1847,5 / 6400 ≈ 0,29.
Вероятность достичь успеха хотя бы в одном из n испытаний есть
1-(1-P)n ≥ p. Тогда n ≥ log(1-P)(1-p), т.е n ≥ ln(1-p) / ln(1-P) ≥ 3,53 => n=4.
Ответ: требуется 4 испытания.
в) a = 4900, b = 33000, p = 0,99.
Решение:
Примерное количество простых чисел в диапазоне от 4900 до 33000
есть
K = π(b) - π(a) = b/ln(b) - a/ln(a) ≈ 2595,1.
Количество чисел, больших 4900 и меньших 33000, есть 28100. Доля
нечетных и не кратных 3-м чисел есть 1/3. Тогда всего перебирается чисел
9366,67. Вероятность случайного выбора простого числа есть
P = 2595,1 / 9366,67 ≈ 0,28.
Вероятность достичь успеха хотя бы в одном из n испытаний есть
1-(1-P)n ≥ p. Тогда n ≥ log(1-P)(1-p), т.е n ≥ ln(1-p) / ln(1-P) ≥ 14,19 => n=15.
Ответ: требуется 15 испытаний.
г) a = 2300, b = 43000, p = 0,97.
Решение:
Примерное количество простых чисел в диапазоне от 2300 до 43000
есть
K = π(b) - π(a) = b/ln(b) - a/ln(a) ≈ 3733,25.
95
Количество чисел, больших 2300 и меньших 43000, есть 40700. Доля
нечетных и не кратных 3-м чисел есть 1/3. Тогда всего перебирается чисел
13566,67. Вероятность случайного выбора простого числа есть
P = 3733,25 / 13566,67 ≈ 0,28.
Вероятность достичь успеха хотя бы в одном из n испытаний есть
1-(1-P)n ≥ p. Тогда n ≥ log(1-P)(1-p), т.е n ≥ ln(1-p) / ln(1-P) ≥ 10,9 => n=11.
Ответ: требуется 11 испытаний.
д) a = 560, b = 36000, p = 0,7.
Решение:
Примерное количество простых чисел в диапазоне от 560 до 36000
есть
K = π(b) - π(a) = b/ln(b) - a/ln(a) ≈ 3342,93.
Количество чисел, больших 560 и меньших 36000, есть 35440. Доля
нечетных и не кратных 3-м чисел есть 1/3. Тогда всего перебирается чисел
11813,33. Вероятность случайного выбора простого числа есть
P = 3342,93 / 11813,33 ≈ 0,28.
Вероятность достичь успеха хотя бы в одном из n испытаний есть
1-(1-P)n ≥ p. Тогда n ≥ log(1-P)(1-p), т.е n ≥ ln(1-p) / ln(1-P) ≥ 3,62 => n=4.
Ответ: требуется 4 испытания.
3. Модуль EILER.
3.1. Вычислить функцию φ(n).
Вычислить функцию φ(n).
а) n=224939;
б) n=5929;
в) n=27;
г) n=143286143;
д) n=343.
Вычислить функцию φ(n).
а) n=224939.
Решение:
96
n=113∙132.
φ(n)=112∙10∙13∙12 = 188760.
Ответ: φ(224939) = 188760.
б) n=5929.
Решение:
n=72∙112.
φ(n)=7∙6∙11∙10 = 4620.
Ответ: φ(5929) = 4620.
в) n=27.
Решение:
n=33.
φ(n)=32∙2 = 18.
Ответ: φ(27) = 18.
г) n=143286143.
Решение:
n=72∙113∙133.
φ(n)=7∙6∙112∙10∙132∙12 = 103062960.
Ответ: φ(143286143) = 103062960.
д) n=343.
Решение:
n=73.
φ(n)=72∙6 = 294.
Ответ: φ(343) = 294.
Вычислить функцию φ(n).
а) n=290605;
б) n=226941;
в) n=5681;
г) n=169;
д) n=1366365.
97
Вычислить функцию φ(n).
а) n=290605.
Решение:
n=5∙7∙192∙23.
φ(n)=4∙6∙19∙18∙22 = 180576.
Ответ: φ(290605) = 180576.
б) n=226941.
Решение:
n=3∙11∙13∙232.
φ(n)=2∙10∙12∙23∙22 = 121440.
Ответ: φ(226941) = 121440.
в) n=5681.
Решение:
n=13∙19∙23.
φ(n)=12∙18∙22 = 4752.
Ответ: φ(5681) = 4752.
г) n=169.
Решение:
n=132.
φ(n)=13∙12 = 156.
Ответ: φ(169) = 156.
д) n=1366365.
Решение:
n=3∙5∙72∙11∙132.
φ(n)=2∙4∙7∙6∙10∙13∙12 = 524160.
Ответ: φ(1366365) = 524160.
Вычислить функцию φ(n).
а) n=133;
б) n=1031849;
в) n=16546530;
98
г) n=5277907635;
д) n=2211105.
Вычислить функцию φ(n).
а) n=133.
Решение:
n=7∙19.
φ(n)=6∙18 = 108.
Ответ: φ(133) = 108.
б) n=1031849.
Решение:
n=7∙13∙17∙23∙29.
φ(n)=6∙12∙16∙22∙28 = 709632.
Ответ: φ(1031849) = 709632.
в) n=16546530.
Решение:
n=2∙3∙5∙7∙11∙13∙19∙29.
φ(n)=1∙2∙4∙6∙10∙12∙18∙28 = 2903040.
Ответ: φ(16546530) = 2903040.
г) n=5277907635.
Решение:
n=3∙5∙7∙11∙13∙17∙23∙29∙31.
φ(n)=2∙4∙6∙10∙12∙16∙22∙28∙30 = 1703116800.
Ответ: φ(5277907635) = 1703116800.
д) n=2211105.
Решение:
n=3∙5∙13∙17∙23∙29.
φ(n)=2∙4∙12∙16∙22∙28 = 946176.
Ответ: φ(2211105) = 946176.
99
Download