Advertisement
Guest User

Untitled

a guest
May 21st, 2019
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 1.68 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Numerics;
  5. using System.Security.Cryptography;
  6. using System.Text;
  7. using System.Threading.Tasks;
  8.  
  9. namespace Lab6
  10. {
  11.     class Program {
  12.         static void Main(string[] args) {
  13.             genBigPrimeNumber(20);
  14.  
  15.             Console.ReadLine();
  16.         }
  17.  
  18.         static void genBigPrimeNumber(int k) {
  19.             BigInteger n, r;
  20.             BigInteger p, q;
  21.             n = r = 0;
  22.             p = q = 13;
  23.  
  24.             while (p.ToString().Length < k) {
  25.                 r = genNumber(q);
  26.                 n = (q * r) + 1;
  27.  
  28.                 //Console.WriteLine(r + " : " + q);
  29.  
  30.                 if (BigInteger.ModPow(2, n - 1, n) != 1 || (BigInteger.ModPow(2, n, n) - 1) != 1)
  31.                     continue;  
  32.                 else {
  33.                     q = p;
  34.                     p = n;
  35.                     //Console.WriteLine(q + " : " + p + " ; Del: " + (p - 1) % q + "; Ran: " + r);
  36.                 }
  37.                    
  38.             }
  39.  
  40.             Console.WriteLine("q|p-1 = " + q + "; p = " + p);
  41.  
  42.             Console.WriteLine((p - 1) % q);
  43.  
  44.         }
  45.  
  46.         static BigInteger genNumber(BigInteger q) {
  47.             // выберем случайное целое число a в отрезке [2, q − 3]
  48.             RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();
  49.  
  50.             byte[] _r = new byte[q.ToByteArray().LongLength];
  51.  
  52.             BigInteger r;
  53.  
  54.             do {
  55.                 rng.GetBytes(_r);
  56.                 r = new BigInteger(_r);
  57.             }
  58.             while ((r < 2 || r >= q - 3) || r % 2 != 0);
  59.  
  60.             return r;
  61.         }
  62.     }
  63. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement