I. Kirish II. Asosiy qism Ochiq kalitli kriptotizmlarda kalitlarni generatsiyalash usullari




Download 385,21 Kb.
bet9/12
Sana05.12.2023
Hajmi385,21 Kb.
#111359
1   ...   4   5   6   7   8   9   10   11   12
Bog'liq
xudo xoxlasa tushadi99%, 3-labarotoriya ishi Saralash usul va algoritmlarini tadqiq qilis, cmd buyruqlari, Incremental model nima, 1matematik, word sAM 1 savol, Документ Microsoft Word (4), Ma\'ruzalar (2), ЛАБОРАТОРНАЯ РАБОТА N1, Dasturlash 2, Ariza, Qalandarova Gulshoda, 1648631455, 1650692784, 1651669892 (2)
Lukas testi dasturiy algoritmi
#include 
using namespace std;


// function to generate prime factors of n void
primeFactors(int n, vector& factors) {
// if 2 is a factor 
if (n % 2 == 0) factors.push_back(2);
while (n % 2 == 0)
n = n / 2;
// if prime > 2 is factor
for (int i = 3; i <= sqrt(n); i += 2) 
{ if (n % i == 0)
factors.push_back(i); while (n % i == 0)
n = n / i; } if (n > 2) factors.push_back(n);
}
// this function produces power modulo
// some number. It can be optimized to
// using int power(int n, int r, int q) {
int total = n; for (int i = 1; i < r; i++)
total = (total * n) % q;
return total; >}
string lucasTest(int n) {
// Base cases
if(n == 1) return "neither prime nor composite";
if (n == 2) return "prime";
if (n % 2 == 0) return "composite1";
// Generating and storing factors
// of n-1 vector factors;
primeFactors(n - 1, factors); // Array for random generator. This array
// is to ensure one number is generated
// only once
int random[n - 3];
for (int i = 0; i < n - 2; i++)
random[i] = >i + 2;
// shuffle random array to produce randomness
shuffle(random, random + n - 3,default_random_engine(time(0)));
// Now one by one perform Lucas Primality
// Test on random numbers generated.
for (int i = 0; i < n - 2; i++) 
{ int a = random[i];
if (power(a, n - 1, n) != >1) return "composite";
// this is to check if every factor // of n-1 satisfy the condition bool
flag = true;
for (int k = 0; k < factors.size(); k++) 
{ // if a^((n-1)/q) equal 1 if >(power(a, (n - 1) / factors[k], n) == 1) 
{ flag = false; break;
}
}
// if all condition satisfy if (flag) return "prime";
}
return "probably composite";
}
// Driver code 
int main() 
{
cout << 7 << " is " << lucasTest(7) << endl;
cout << 9 << " is " << lucasTest(9) << endl;
cout << 37 << " is " << lucasTest(37) << endl;
return 0;
}

Frobenius kvadratik tublikka tekshirish testi



Download 385,21 Kb.
1   ...   4   5   6   7   8   9   10   11   12




Download 385,21 Kb.

Bosh sahifa
Aloqalar

    Bosh sahifa



I. Kirish II. Asosiy qism Ochiq kalitli kriptotizmlarda kalitlarni generatsiyalash usullari

Download 385,21 Kb.