Программный комплекс « Алгоритмы факторизации»



 

Функциональное назначение программы, область применения, её ограничения

Программный комплекс предназначен для реализации алгоритмов факторизации.

Результатом работы данного решения является разложение натурального числа в произведение простых чисел, на основе алгоритмов факторизации.

Ограничения применения программного комплекса определяются произ-водительностью персонального компьютера (ПК).

Программа разработана на языке программирования python версии 3.8.

Программный комплекс предназначен для работы на ПК с системами Windows 7 с пакетом обновления 1 (SP1) (с последними обнов-лениями Windows) и выше.

Для корректной работы программного комплекса необходимо наличие ПК с процессором с тактовой частотой не ниже 1,8 ГГц. Рекомендуется как минимум двухъядерный процессор. Необходимый объем оперативной памяти составляет 1 ГБ ОЗУ. Рекомендуется 2 ГБ ОЗУ (минимум 2,5 ГБ при выполнении на виртуальной машине). Место на жестком диске: минимум 100 МБ свободного места.

Проведенные эксперименты показывают, что для работы с данным про-граммный комплексам не требуется специальной подготовки, она интуитивно понятна и осваивается за несколько минут от начала работы с данной программой. В пунктах 2.2 и 2.3 представлены руководства программиста и пользователя.

Руководство программиста

 

Программное обеспечение включает в себя основное окно с кодом через которое осуществляется управление и доступ к отдельным методам.

Данное программное обеспечение использует следующие библиотеки:

- sys;

- match;

Matchодин из наиважнейших в Python. Этот модуль предоставляет обширный функционал для работы с числами. [10].

Основной код программы находится в классе GetLehmanFactor. Функции этого класса вызывают функции других классов.

Функция Trunc возвращает целочисленную часть числа с плавающей запятой.Она возвращает эту часть как Целочисленное значение.

Функция Sqrt возвращает квадратный корень числа (Number).Число должно быть вещественного типа.[11]

Функция Power возводит X в степень Y. Значение аргумента Х должно быть больше нуля, иначе возникнет исключение EInvalidOp. Данная функция аналогична функции IntPower за исключением того, что для Power значение показателя степени Y может превышать MaxInt и иметь нецелочисленный тип.

Процедура Assert используется в Delphi при отладке программы на предмет истинности утверждений. Эти утверждения по смыслу должны быть истинны, но почему-то могут нарушаться. Если проверяемое утверждение будет ложным, то процедура прекратит работу и сгенерирует исключение EAssertionFailed с выдачей ошибки в сообщении.

Функции ceil возвращают значение с плавающей запятой, представляющее наименьшее целое число, которое больше или равно x. Ошибки не возвращаются.[12]

Программа разработана на языке программирования python версии 3.8 и имеет стандартный интерфейс. Для работы ПО не нужно наличие каких-либо дополнительных программно-аппаратных средств.

Первое окно программы – главное меню, является точкой доступа ко всем функциям программы.

Второе окно- разложение натурального числа по алгоритму Ферма.

На вход функции подаются: натуральное число; специальная переменная k, которая будет использоваться в вычислениях и переменная, которая при достижении определённого значения закончит алгоритм.

 Блок - схема алгоритма вычисление с использованием алгоритма Ферма представлена на рисунке 1.

 

Конец
Начало
Вводим n
Проверяем n на нечётность
Находим S1 и S
Если S не равен S1
a=s, print(n,’=’,a,’*’,a)
X=S+K
L=x2-n
Y1=sqrt(L),y
Если y==y1
K+=1
A=x+y, B=x-y
Print(n=a*b)
Если a==1 or b==1
Print(n-простое число), z=0
Да
Да
Да
Да
Нет
Нет
Нет
Нет

 

 


Рисунок 1 – Блок-схема вычисления с использованием алгоритма Ферма

На выходе ответ будет представлен в виде: (Число n, и его множители)

Третье окно – разложение натурального числа по алгоритму Лемана.

Для вычисления используется функцияGetLehmanFactor. На вход функции подаётся натурального число, которое будет использоваться в вычислениях

Блок-схема алгоритма вычисления по алгоритму Лемана представлена на рисунке 2

 

 

Начало
Конец
Вводим N
Находим все a до N1/3
Если N/a:
Находим k и d
Находим F
Вычисляем A и B
Находим НОДd1= (A-B;N)
Вычисляем второй множительd2=N/d1
Print(N, ’=’, d1,’*’,d2)
Print(N, ’=’, a,’*’, b)

 

 


Рисунок 2 – блок-схема вычисления по алгоритму Лемана

 

На выходе функции выводится два множителя.

Руководство пользователя

Программ имеет одно основное окно, через которое происходит управление функциями.

Рисунок 3- Окно программы

 

Разложение по алгоритму Ферма происходит при вводе в программу единицы. После чего выйдет новая подсказка, которая предложит ввести число. Ввод данных при алгоритме Ферма изображён на рисунке 4.

 

 

Рисунок 4 – Ввод данных при алгоритме Ферма

 

Вводим натуральное число и нажимаем на кнопку, чтобы ввести данное в программу. Дальше нам выйдет результат. Результат разложения по алгоритму Ферма изображён на рисунке 5.

 

 

Рисунок 5 –  Результат разложения по алгоритму Ферма

 

Для того чтобы воспользоваться алгоритмом Лемана, возвращаемся к начальной подсказке где нас просят ввести 2 если хотим использовать этот алгоритм. После ввода двойки выходит новая подсказка, где нас просят ввести число. Ввод данных при алгоритме Лемана изображён на рисунке 6.

 

 

Рисунок 6 – Ввод данных при алгоритме Лемана

 

Вводим натуральное число и нажимаем на кнопку, чтобы ввести данное в программу. Дальше нам выйдет результат. Результат разложения по алгоритму Лемана изображён на рисунке 7.

 

 

Рисунок 7 – Результат разложения по алгоритму Лемана

Тестовый пример

Реализуем алгоритм Ферма

Для примера возьмём большое число n=89755.

1)Найдём корень от числа n.

2)Если значение получилось не целое, ищем , x=300+0=300

3)Находим переменную , L=3002-89755=245

4)Находим Y1.

5) Округляем значение y1 и присваиваем полученное значение y.Y=16

6) Если Y1 не равен Y, то прибавляем и повторяем шаг 2, до тех пока они не станут равны. K=82, L=3822-89755=56169, Y1=237, Y1=Y

7)Находимaиb. , . A=382+237=619, B=382-237=145

8)Данное разложение является не конечным, так как, очевидно, что число 145 не является простым: 145=29*5

В итоге, конечное разложение исходного числа {\displaystyle n}n на произведение простых множителей 89755=29*5*619

Разложение получено, теперь посмотрим, какой результат даст программа.

Результат разложения показан на рисунке 8.

 

 

Рисунок 8 – Результат разложения

Программа показала правильный ответ.

Реализуем алгоритм Лемана.

1)Разберем пример с n=1387, тогда для , где , проверяем является ли число a делителем числа n. Не трудно убедится, что таких нет, тогда переходим к следующему пункту.

2) Для всех и всех проверяем, является ли число квадратом натурального числа. В нашем случае существуют такие k=3 и d=1, что выражение является полным квадратом и равно 256=162.

3)Находим A и B по формуле  и

A=130 и B=16.

4)Тогда находим наибольший общий делитель , удовлетворяет неравенству и является делителем числа n. В итоге, мы разложили число 1387 на два множителя: 73 и 19.

Разложение получено, теперь посмотрим, какой результат даст программа.

Результат разложения показан на рисунке 9.

 

 

Рисунок 9 – Результат разложения

 

Программа показала правильный ответ.

 


Заключение

В  ходе выполнения курсовой работы было произведено ознакомление с алгоритмами факторизации. Были реализованы в виде программы 2 алгоритма факторизации: Метод Ферма, метод Лемана. Была проведена проверка программы, в результате которой, было выявлено, что программа успешно справляется со своей задачей.


Дата добавления: 2021-01-20; просмотров: 145; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!