Advertisement
Guest User

Untitled

a guest
Nov 17th, 2017
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.90 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3. #include <random>
  4.  
  5.  
  6. using namespace std;
  7.  
  8.  
  9.  
  10.  
  11. bool IsPrime(long long numar)
  12. {
  13.  
  14. if ((numar & 1) == 0)
  15. {
  16. if (numar == 2)
  17. {
  18. return true;
  19. }
  20. else
  21. {
  22. return false;
  23. }
  24. }
  25.  
  26. long long num = (long long)sqrt(numar);
  27.  
  28. for (int i = 2; i <= num; i += 1)
  29. {
  30. if ((numar % i) == 0)
  31. {
  32. return false;
  33. }
  34. }
  35. return true;
  36. }
  37.  
  38. bool IsMersennePrime(long long n)
  39. {
  40.  
  41. long long x = (long long ) (pow(2, n) - 1);
  42.  
  43.  
  44. // return true;
  45. return IsPrime((long long)x);
  46. }
  47.  
  48.  
  49. void job_1()
  50. {
  51. for (long long i = 2; i <= 257; i++)
  52. {
  53. if (IsMersennePrime(i))
  54. cout << "Nr prim: " << i << "\tMersenne Prime: " << (long long)(pow(2, i) - 1) << endl;
  55. }
  56. }
  57.  
  58.  
  59. void job_2(int number)
  60. {
  61. int i = 1, u = 1, sum = 0, ctr = 0;
  62.  
  63. while (i <= number)
  64. {
  65. while (u <= number)
  66. {
  67. if (u<i)
  68. {
  69. if (i%u == 0)
  70. sum = sum + u;
  71. }
  72. u++;
  73. }
  74. if (sum == i)
  75. {
  76. ctr++;
  77. cout << i << " is a Perfect number." << "\n";
  78. }
  79. i++;
  80. u = 1; sum = 0;
  81. }
  82. cout << "Perfect numbers from 1 to "<<number <<" (count): "<< ctr << "\n";
  83. }
  84.  
  85.  
  86. string job_3(int p)
  87. {
  88. int s = 4;
  89. long M = (long)pow(2,p)-1;
  90.  
  91. for (int i = 3; i< p; i++)
  92. {
  93. s = ( s*s - 2) % M;
  94. }
  95.  
  96. return (s == 0) ? "Prime" : "Composite";
  97.  
  98. }
  99.  
  100.  
  101. bool MillerTest(int n, int d)
  102. {
  103.  
  104. std::random_device rd; // obtain a random number from hardware
  105. std::mt19937 eng(rd()); // seed the generator
  106. std::uniform_int_distribution<> distr(2, n-2); // define the range
  107.  
  108. int a = distr(eng);
  109.  
  110. long x = (long) pow(a,d) % n;
  111.  
  112. if (x == 1 || x == n - 1)
  113. {
  114. return true;
  115. }
  116.  
  117.  
  118. while (d != n-1)
  119. {
  120. x = (x * x) % n;
  121. if (x == 1)
  122. {
  123. return false;
  124. }
  125.  
  126. if (x == n-1)
  127. {
  128. return true;
  129. }
  130.  
  131. }
  132.  
  133. }
  134.  
  135. bool isPrime(int n, int k)
  136. {
  137. // Corner cases
  138. if (n <= 1 || n == 4) return false;
  139. if (n <= 3) return true;
  140.  
  141. // Find r such that n = 2^d * r + 1 for some r >= 1
  142. int d = n - 1;
  143. while (d % 2 == 0)
  144. d /= 2;
  145.  
  146. // Iterate given nber of 'k' times
  147. for (int i = 0; i < k; i++)
  148. if (MillerTest(d, n) == false)
  149. return false;
  150.  
  151. return true;
  152. }
  153.  
  154.  
  155.  
  156. void job_4()
  157. {
  158. int k = 4; // Number of iterations
  159.  
  160. cout << "All primes smaller than 100: \n";
  161. for (int n = 1; n < 100; n++)
  162. if (isPrime(n, k))
  163. cout << n << " ";
  164. }
  165.  
  166.  
  167. int main()
  168. {
  169.  
  170. cout << "Job 1: Write a prime generator using Mersene rules"<<endl<<endl;
  171. job_1();
  172.  
  173. cout << endl <<"Job 2: Write a perfect numbers generator " << endl << endl;
  174. job_2(10000);
  175.  
  176. cout << endl << "Job 3: Write a prime number generator using Lucas-Lehmer Test " << endl << endl;
  177. cout << endl << "For p = 34 => "<<job_3(34) << endl;
  178.  
  179. cout << endl << "Job 4: Write a prime number generator using Miller-Rabin test" << endl << endl;
  180. job_4();
  181.  
  182.  
  183.  
  184.  
  185.  
  186.  
  187.  
  188.  
  189.  
  190.  
  191.  
  192.  
  193. return 0;
  194. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement