Проверка больших чисел на простоту

Изучение основных подгрупп алгоритмов проверки простоты больших чисел: детерминированные и вероятностные проверки. Исследование методов генерации и проверки на простоту больших чисел с помощью метода Ферма (малая теорема Ферма), составление программы.

Рубрика Математика
Вид лабораторная работа
Язык русский
Дата добавления 27.12.2010
Размер файла 11,7 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Министерство образования Республики Беларусь

Учреждение образования

«Брестский государственный технический университет»

Кафедра ИИТ

Лабораторная работа №4

По дисциплине «Криптография»

По теме «Проверка больших чисел на простоту»

Выполнила Студентка III курса

Группы ИИ-5 Олехник Е.В.

Проверил Хацкевич М.В.

Брест 2010

Тема: Проверка больших чисел на простоту. Метод Ферма.

Цель: Изучить методы генерации и проверки на простоту больших чисел.

Ход работы:

Листинг программы:

Program.cs

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace Tania_KMZILab3

{

classProgram

{

staticvoid Main()

{

BigInteger bigInteger;

do

{

SelfDecimatedGenerator generator = newSelfDecimatedGenerator(98); // в конструкторе задаёт длину числав битах

bigInteger = newBigInteger(generator.Generate(), 2); // создаём боооольшое число передаём как первый параметр сроку второй 2-это значит двоичная система

}

while (!Ferma.FermatLittleTest(50, bigInteger));

Console.WriteLine(bigInteger); // вывод на консоль числа

Console.WriteLine(Ferma.FermatLittleTest(50, bigInteger));

Console.ReadKey(); // ожидание нажатия клавиши с консоли

}

}

}

Ferma.cs

using System;

namespace Tania_KMZILab3

{

staticclassFerma

{

staticpublicbool FermatLittleTest(int confidence, BigInteger thisVal)

{

if ((thisVal % 2) == 0)

returnfalse;

int bits = thisVal.bitCount();

BigInteger a = newBigInteger();

Random rand = newRandom();

for(int round = 0; round < confidence; round++)

{

SelfDecimatedGenerator generator = newSelfDecimatedGenerator(40); // в конструкторе задаёт длину числав битах

a = newBigInteger(generator.Generate(), 2);

BigInteger expResult = a.modPow(thisVal - 1, thisVal);

if(expResult != 1)

{

returnfalse;

}

}

returntrue;

}

}

}

SelfDecimatedGenerator.cs

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Collections;

namespace Tania_KMZILab3

{

classSelfDecimatedGenerator

{

privateLFSR lfsr;

privateint k = 10;

privateint d = 23;

public SelfDecimatedGenerator(int length

{

lfsr = newLFSR(length);

lfsr.UseRegister();

}

publicstring Generate()

{

if (lfsr.Quantity())

{

for (int i = 0; i < k; i++)

lfsr.UseRegister();

}

else

{

for (int i = 0; i < d; i++)

lfsr.UseRegister();

}

string bitString = "";

for (int i = 0; i < lfsr.GetBits().Length; i++)

{

if (lfsr.GetBits()[i] == true)

bitString += "1";

else

bitString += "0";

}

return bitString;

}

}

}

LFSR.cs

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Collections;

namespace Tania_KMZILab3

{

classLFSR

{

privateBitArray Array;

privatebool outBit;

publicBitArray GetBits()

{

return Array;

}

public LFSR(int lenght)

{

Array = newBitArray(lenght);

Random rnd = newRandom();

for (int i = 0; i < lenght; i++)

{

if ((rnd.Next(0, 1000) % 2) == 0)

{

Array[i] = true;

}

else

{

Array[i] = false;

}

}

}

publicvoid UseRegister()

{

bool feedBack;

feedBack = Array.Get(15) ^ Array.Get(10) ^ Array.Get(15) ^ Array.Get(12);

outBit = Array.Get(Array.Length - 1);

for (int i = 0; i < (Array.Length - 1); i++)

{

Array.Set(Array.Length - i - 1, Array.Get(Array.Length - i - 2));

}

Array.Set(0, feedBack);

}

publicbool Quantity()

{

if (outBit == false)

{

returnfalse;

}

elsereturntrue;

}

}

}

Работа программы:

76852633312072762368612999781

True

62106168008639652108721361597

True

34503197996314167362452631497

True

Вывод: Изучили методы генераций больших простых чисел, а так же способы их проверки на простоту.


Подобные документы

  • Теорема Бернулли как простейшая форма закона больших чисел. Предельные теоремы теории вероятностей и объяснение природы устойчивости частоты появлений события. Качественные и количественные утверждения закона больших чисел, его практическое применение.

    курсовая работа [75,2 K], добавлен 17.12.2009

  • Предельные теоремы теории вероятностей. Сходимость последовательностей случайных величин и вероятностных распределений. Метод характеристических функций. Закон больших чисел. Особенности проверки статистических гипотез (критерия согласия w2 Мизеса).

    курсовая работа [1,0 M], добавлен 27.01.2012

  • Алгоритм Миллера-Рабина и малая теорема Ферма. Псевдопростые числа, тест на простоту. Криптографический алгоритм шифрования с открытым ключом и цифровой подписью. Создание открытого и секретного ключей. Режим подписи сообщения и способы ее проверки.

    реферат [65,1 K], добавлен 12.12.2009

  • Поиски и доказательства простоты чисел Мерсенна. Окончание простых чисел Мерсенна на цифру 1 и 7. Вопрос сужения диапазона поиска. Эффективный алгоритм Миллера-Рабина. Разделение алгоритмов на вероятностные и детерминированные. Числа джойнт ряда.

    статья [127,5 K], добавлен 28.03.2012

  • Проблема универсального генератора простых чисел. Попытки создания формул для нахождения простых чисел. Сущность теоремы сравнений. Доказательство "Малой теоремы Ферма". "Золотая теорема" о квадратичном законе взаимности. Генераторы простых чисел Эйлера.

    реферат [22,8 K], добавлен 22.03.2016

  • Представление доказательства неравенства Чебышева. Формулирование закона больших чисел. Приведение примера нахождения математического ожидания и дисперсии для равномерно распределенной случайной величины. Рассмотрение содержания теоремы Бернулли.

    презентация [65,7 K], добавлен 01.11.2013

  • Идея элементарного доказательства великой теоремы Ферма исключительно проста: разложение чисел a, b, c на пары слагаемых, группировка из них двух сумм U' и U'' и умножение равенства a^n + b^n – c^n = 0 на 11^n (т.е. на 11 в степени n, а чисел a, b, c на 1

    статья [12,9 K], добавлен 07.07.2005

  • Методи перевірки чисел на простоту: критерій Люка та його теореми, їх доведення. Теорема Поклінгтона та її леми. Метод Маурера - швидкий алгоритм генерації доведених простих чисел, близьких до випадкового та доведення Д. Коувером і Дж. Куіскуотером.

    лекция [138,8 K], добавлен 08.02.2011

  • Два варианта доказательства теоремы. Приведенные преобразования равенства Ферма над множеством натуральных чисел показывают, что с помощью конечного числа арифметических действий оно всегда приводится к тождеству, что и доказывает теорему.

    статья [74,0 K], добавлен 14.04.2007

  • Знакомство с Пьером де Ферма - французским математиком, одним из создателей аналитической геометрии, математического анализа, теории вероятностей и теории чисел. Разработка способов систематического нахождения всех делителей числа. Великая теорема Ферма.

    презентация [389,1 K], добавлен 16.12.2011

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.