Реферат: Проверка больших чисел на простоту - Refy.ru - Сайт рефератов, докладов, сочинений, дипломных и курсовых работ

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

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

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

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

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

Кафедра ИИТ

Лабораторная работа №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

 

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