DevioLab CRYPTO TRADING AUTOMATION
LIVE
AUTOMATED CRYPTO TRADING • BINANCE
Автоматизуйте свій криптопортфель
Торгові боти DevioLab аналізують крипторинок, автоматично відкривають і закривають позиції та керують вашим портфелем на Binance 24/7.
CRYPTO 80 Bots
BINANCE Spot Trading
TRADING 24 / 7
Спробувати DevioLab
deviolab.com

Алгоритми факторизації складених чисел

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
ІКТА
Факультет:
РТ
Кафедра:
Кафедра захисту інформації

Інформація про роботу

Рік:
2013
Тип роботи:
Звіт до лабораторної роботи
Предмет:
Алгоритмічні основи криптології
Група:
БІ

Частина тексту файла (без зображень, графіків і формул):

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА” ІКТА кафедра захисту інформації З В І Т до лабораторної роботи №4 з курсу: “Алгоритмічні основи криптології ” на тему: “Алгоритми факторизації складених чисел” Варіант № 25 1. Мета роботи. 2. Повний текст завдання. 3. Блок-схема алгоритму. 4. Список ідентифікаторів констант, змінних, процедур і функцій, використаних в програмі, та їх пояснення. 5. Остаточно відлагоджений текст програми згідно з отриманим завданням . 6. Результати виконання програми. 1. Мета роботи Вивчити основні алгоритми факторизації складних чисел. 2. Завдання Реалізувати програму, що дозволяє знаходити розкладання на множники заданого числа n комбінованим методом: р-Полларда і пробних ділень; 3. Блок-схема алгоритму randomNumber(int n) factorise(int n) check(int secondDiv) SCD(int firstNumber, int secondNumber) button1_Click(object sender, EventArgs e) 4. Cписок ідентифікаторів констант, змінних, функцій, використаних у блок-схемі алгоритму і програмі, та їх пояснення. massDiv – масив типу int, що приймає значення дільників; j, x, oldx, d – змінні типу int, що використовуються у методі р-Полларда; n — змінна, що факторизується; correction — змінна, що відповідає за точність результату; randomNumber()– метод, що генерує випадкове число; check()– метод логічного типу, що повертає відповідне значеня в залежності від числа; factorise ()– метод р-Полларда факторизації складного числа; SCD ()– метод, що повертає найменше спільне кратне двох чисел; Form1_Load ()– метод, що виконується безпосередньо післа завантаження програми; button1_Click () – метод, який виконує моделацію натиску на програмну кнопку; 5. Текст програми using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace k2_s2_lab4 { public partial class Form1 : Form { public static List<int> massDiv = new List<int>(); public static int massDivLength; public static int j, x, oldx, d, n; public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { int temp; textBox2.Text = ""; try { n = Convert.ToInt32(textBox1.Text); } catch (Exception) { textBox2.Text = " Avaible range 3<number<2147000598; "; return; } if (n < 3) { textBox2.Text = " Avaible range 3<number<2147000598; "; return; } factorise(n); int secondDiv = n / d; textBox2.Text += d; while (true) { if (check(secondDiv) == true) { textBox2.Text += " * " + SCD(secondDiv, secondDiv); temp = secondDiv / SCD(secondDiv, secondDiv); if (check(temp) == false) { textBox2.Text += " * " + temp; break; } else { secondDiv = temp; } } else { textBox2.Text += " * " + secondDiv; break; } } } private bool check(int secondDiv) { for (int i = 0; i < massDivLength; i++) { if (secondDiv == massDiv[i]) break; if (secondDiv % massDiv[i] == 0) { return true; } } return false; } private int factorise(int n) { d = 1; j = 1; if (check(n) == false) { textBox2.Text = "Number " + n + " is prime -> "; return 0; } x = RandomNumber(n-1); while (true) { oldx = x; for (int i = 1; i < j; i++) { x = ((x * x) + 1) % n; d = SCD(Math.Abs(x - oldx), n); if (d > 1 && d < n) { return d; } } j *= 2; } } private int SCD(int firstNumber, int secondNumber) { //e.g. 3,18; int scd; int sdfn=1; for (int i = 0; i < massDivLength; i++) { if (firstNumber % massDiv[i] == 0) { sdfn = massDiv[i]; if (secondNumber % sdfn == 0) { scd = sdfn; return scd; } } } return 1; } private int RandomNumber(int n) { Random rNum = new Random(); return rNum.Next(1, n); } private void Form1_Load(object sender, EventArgs e) { for (int i = 2; i < 256; i++) { massDiv.Add(i); } massDivLength = massDiv.Count; } } } 6. Результат роботи /
Антиботан аватар за замовчуванням

22.05.2013 21:07

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!