Advertisement
Yanislav29

Untitled

Jan 4th, 2020
127
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.31 KB | None | 0 0
  1. bool isPrime(int n)//фунция за проверка дали едно число е просто
  2. {
  3.  
  4. if (n <= 1) return false;
  5. if (n <= 3) return true;
  6.  
  7.  
  8. if (n % 2 == 0 || n % 3 == 0) return false;
  9.  
  10. for (int i = 5; i*i <= n; i = i + 6)
  11. if (n%i == 0 || n % (i + 2) == 0)
  12. return false;
  13.  
  14. return true;
  15. }
  16.  
  17.  
  18. int power(int x, unsigned int y, int p)
  19. {
  20. int s = 1;
  21.  
  22. x = x % p;
  23.  
  24. while (y > 0)
  25. {
  26.  
  27. if (y & 1)
  28. s = (s*x) % p;
  29.  
  30. y = y >> 1;
  31. x = (x*x) % p;
  32. }
  33. return s;
  34. }
  35. void findPrimefactors(unordered_set<int> &s, int n)
  36. {
  37.  
  38. while (n % 2 == 0)
  39. {
  40. s.insert(2);
  41. n = n / 2;
  42. }
  43.  
  44. for (int i = 3; i <= sqrt(n); i = i + 2)
  45. {
  46.  
  47. while (n%i == 0)
  48. {
  49. s.insert(i);
  50. n = n / i;
  51. }
  52. }
  53.  
  54.  
  55. if (n > 2)
  56. s.insert(n);
  57. }
  58. int CheckFor_PR(int n) //изпълнение на задача 11 проверка за примитивен корен
  59. {
  60. unordered_set<int> s;
  61.  
  62.  
  63. if (isPrime(n) == false)
  64. return false;
  65.  
  66.  
  67. int p = n - 1;
  68.  
  69.  
  70. findPrimefactors(s, p);
  71.  
  72.  
  73. for (int r = 2; r <= p; r++)
  74. {
  75.  
  76. bool flag = false;
  77. for (auto it = s.begin(); it != s.end(); it++)
  78. {
  79.  
  80.  
  81. if (power(r, p / (*it), n) == 1)
  82. {
  83. flag = true;
  84. break;
  85. }
  86. }
  87.  
  88.  
  89. if (flag == false)
  90. return true;
  91. }
  92.  
  93.  
  94. return false;
  95. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement