Advertisement
TimmyChannel

Modular multiplication

Jan 9th, 2024
898
0
Never
1
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.43 KB | Software | 0 0
  1. using System.Numerics;
  2.  
  3. try
  4. {
  5.     Console.WriteLine("Выберите режим работы программы:");
  6.     Console.WriteLine("1. Ввести данные вручную");
  7.     Console.WriteLine("2. Использовать тестовые данные");
  8.     Console.Write("Ваш выбор: ");
  9.     string mode = Console.ReadLine();
  10.  
  11.     if (mode == "1")
  12.     {
  13.         Console.Write("a = ");
  14.         int a = int.Parse(Console.ReadLine());
  15.  
  16.         Console.Write("b = ");
  17.         int b = int.Parse(Console.ReadLine());
  18.  
  19.         Console.Write("n = ");
  20.         int n = int.Parse(Console.ReadLine());
  21.  
  22.         var T = new BigInteger(a) * new BigInteger(b);
  23.         int invN = ModInverse(n, b);
  24.         if (invN == -1)
  25.         {
  26.             Console.WriteLine("Обратного значения не существует");
  27.             return;
  28.         }
  29.         var m = T * invN % b;
  30.         var u = (T + m * n) / b;
  31.  
  32.         Console.WriteLine($"Результат u = {u}");
  33.         Console.ReadLine();
  34.     }
  35.     else if (mode == "2")
  36.     {
  37.         // Заданные значения для проверки
  38.         int[] aValues = { 25925, 27056, 59259, 25925, 27056, 59259, 25925, 27056, 59259, 25925, 27056, 59259, 25925, 27056, 59259, 25925, 27056, 59259, 25925, 27056, 59259, 25925, 27056, 59259, 25925 };
  39.         int[] bValues = { 25925, 27056, 59259, 25925, 27056, 59259, 25925, 27056, 59259, 25925, 27056, 59259, 25925, 27056, 59259, 25925, 27056, 59259, 25925, 27056, 59259, 25925, 27056, 59259, 25925 };
  40.         int[] nValues = { 21249, 22225, 31877, 65060, 40417, 24461, 39501, 8339, 9560, 7209, 38407, 64775, 17018, 51130, 4717, 58183, 33683, 27851, 17354, 19168, 16732, 30270, 23737, 59423, 36199, 9 };
  41.         int[] uExpected = { 37629, 20959, 33281, 62342, 19752, 32000, 56446, 58723, 19095, 64964, 13501, 28287, 36720, 383, 3482, 28050, 50444, 16293, 5802, 61867, 33550, 21881, 55090, 26725, 33952, 1 };
  42.  
  43.         for (int i = 0; i < aValues.Length; i++)
  44.         {
  45.             int a = aValues[i];
  46.             int b = bValues[i];
  47.             int n = nValues[i];
  48.             int expectedU = uExpected[i];
  49.  
  50.             var T = new BigInteger(a) * new BigInteger(b);
  51.             int invN = ModInverse(n, b);
  52.             if (invN == -1)
  53.             {
  54.                 Console.WriteLine("Обратного значения не существует\n");
  55.                 continue;
  56.             }
  57.             var m = T * invN % b;
  58.             var u = (T + m * n) / b;
  59.  
  60.             Console.WriteLine($"Проверка значений a={a}, b={b}, n={n}:");
  61.             Console.WriteLine($"Рассчитанное u = {u}, ожидаемое u = {expectedU}");
  62.             Console.WriteLine(u == expectedU ? "Результат верный.\n" : "Результат неверный.\n");
  63.         }
  64.         Console.ReadLine();
  65.     }
  66.     else
  67.     {
  68.         Console.WriteLine("Неверный ввод. Выберите 1 или 2.");
  69.         Console.ReadLine();
  70.     }
  71. }
  72. catch (Exception e)
  73. {
  74.     Console.WriteLine($"Error: {e.Message}");
  75.     Console.ReadLine();
  76. }
  77.  
  78. // Функция для нахождения обратного значения по модулю с использованием BigInteger.ModPow
  79. static int ModInverse(int a, int m)
  80. {
  81.     a %= m;
  82.     for (int x = 1; x < m; x++)
  83.     {
  84.         if ((a * x) % m == 1)
  85.         {
  86.             return x;
  87.         }
  88.     }
  89.     return -1;
  90. }
  91.  
  92.  
Advertisement
Comments
  • bluewhatsapp
    149 days
    # text 0.23 KB | 0 0
    1. An updated mod, named Blue WhatsApp Plus APK Download with more emojis, themes and fonts,
    2. Complete customizing includes everything APK with online free version WhatsApp Plus Blue.
    3.  
    4. <a href="https://bluewhatsapp.org/">Blue WhatsApp</a>
    5.  
Add Comment
Please, Sign In to add comment
Advertisement