Advertisement
mrAnderson33

Задания из второй лабы по крипте(1.1-1.4)

Jun 14th, 2018
259
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 4.27 KB | None | 0 0
  1. /*
  2.     Пользователем вводится целое число m.
  3.     Напишите программу, выводящую все простые числа, которые меньше  m. +
  4.     Выведите на экран приведенную систему вычетов по модулю m.+
  5.     Напишите функцию вычисляющую значение φ(m), где φ(m)-функция Эйлера.+
  6.     Напишите программу представляющую число m в каноническом разложении по степеням простых чисел.+
  7. */
  8. using System;
  9. using System.Collections.Generic;
  10. using System.Linq;
  11. using System.Numerics;
  12. using System.Text;
  13. using System.Threading.Tasks;
  14.  
  15. namespace Lab02_kripta_
  16. {
  17.     class Tasks
  18.     {
  19.         public static int[] GetSimpleNumbers(int count)
  20.         {
  21.             var numbers = new bool[count];
  22.             var res = new List<int>();
  23.  
  24.             Parallel.For(0, count, (iterator) => numbers[iterator] = true);
  25.  
  26.             int p = 2;
  27.             int i = 2;
  28.  
  29.             while (i * i < count)
  30.             {
  31.                 if (numbers[i])
  32.                     for (int j = i * i; j < count; j += i)
  33.                         numbers[j] = false;
  34.                 i++;
  35.             }
  36.  
  37.             int num = 0;
  38.  
  39.             foreach (var n in numbers)
  40.             {
  41.                 if ((n) && num > 1) res.Add(num);
  42.                 num++;
  43.             }
  44.  
  45.             return res.ToArray();
  46.         }
  47.  
  48.         public static ulong Eyler(ulong n)
  49.         {
  50.             ulong res = n, en = Convert.ToUInt64(Math.Sqrt(n) + 1);
  51.             for (ulong i = 2; i <= en; i++)
  52.                 if ((n % i) == 0)
  53.                 {
  54.                     while ((n % i) == 0)
  55.                         n /= i;
  56.                     res -= (res / i);
  57.                 }
  58.             if (n > 1) res -= (res / n);
  59.             return res;
  60.         }
  61.  
  62.         public static string GetDecomposition(int num)
  63.         {
  64.             var res = string.Empty;
  65.  
  66.             res+=$"{num} = 1";
  67.             for (int i = 0; num % 2 == 0; num /= 2)
  68.                 res += $" * {2}";
  69.             for (int i = 3; i <= num;)
  70.                 if (num % i == 0)
  71.                 {
  72.                     res += $" * {i}";
  73.                     num /= i;
  74.                 }
  75.                 else i += 2;
  76.  
  77.             return res;
  78.         }
  79.  
  80.         public static int gcd(int a, int b)
  81.         {
  82.             while (b != 0)  b = a % (a = b);
  83.             return a;
  84.         }
  85.  
  86.         public static int[] ReducedResidueSystem(int modulo)
  87.         {
  88.             var res = new List<int>();
  89.  
  90.             Parallel.For(0, modulo, (i) =>
  91.              {
  92.                  if (gcd(i, modulo) == 1) res.Add(i);
  93.              });
  94.  
  95.             res.Sort();
  96.  
  97.             return res.ToArray();
  98.         }
  99.  
  100.         public static long ModPowlong (long num, long degree, long modulo)
  101.         {
  102.             long b = 1;
  103.  
  104.             while (degree != 0)
  105.             {
  106.                 if (degree % 2 == 0)
  107.                 {
  108.                     degree /= 2;
  109.                     num = (num*num)% modulo;
  110.                 }
  111.                 else
  112.                 {
  113.                     degree--;
  114.                     b = (b*num)%modulo;
  115.                 }
  116.             }
  117.             return b;
  118.         }
  119.  
  120.  
  121.         public static void Execute()
  122.         {
  123.             int m = 0;
  124.                 do Console.Write("Введите целое число m : ");
  125.                 while(!Int32.TryParse(Console.ReadLine(),out m));
  126.  
  127.                 Console.Write($"Целые простые числа меньшие {m} : ");
  128.  
  129.                 foreach(var num in GetSimpleNumbers(m)) Console.Write($"{num} ");
  130.  
  131.                 Console.WriteLine($"\nРазложение постепеням: {GetDecomposition(m)}");
  132.  
  133.                 Console.WriteLine($"фи({m})={Eyler((ulong)m)}");
  134.  
  135.                 var arr = ReducedResidueSystem(m);
  136.  
  137.                 Console.Write($"Приведеная система вычетов по модулю {m} : ");
  138.  
  139.                 foreach (var num in arr) Console.Write($"{num} ");
  140.  
  141.                 Console.Write("\n");
  142.         }
  143.  
  144.         public Delegate this[int index] => Actions[index];
  145.     }
  146. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement