Advertisement
Hamada14

Number Theory

Jul 28th, 2016
59
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.76 KB | None | 0 0
  1. #include <iostream>
  2. #include <stdio.h>
  3. #include <bits/stdc++.h>
  4.  
  5. using namespace std;
  6.  
  7. int prime[100000000];
  8. int maxVal = 1e6;
  9.  
  10. int gcd(int x, int y)
  11. {
  12.     return y == 0 ? 1 : gcd(y, x  % y);
  13. }
  14.  
  15. int lcm(int x, int y)
  16. {
  17.     return x * y / gcd(x, y);
  18. }
  19. void printPrime()
  20. {
  21.     vector<int> vec;
  22.     for(int counter = 2; counter <= maxVal; counter++)
  23.     {
  24.         if(prime[counter])
  25.             vec.push_back(counter);
  26.     }
  27.     int vSize = vec.size();
  28.     cout << "The Primes are : " << vSize << endl;
  29.     for(int counter = 0; counter < vSize; counter++)
  30.         cout << vec[counter] << " ";
  31. }
  32.  
  33. void naivePrimeMethod()
  34. {
  35.     memset(prime, true, sizeof prime);
  36.     for(int counter = 2; counter <= maxVal; counter++)
  37.     {
  38.         for(int counter2 = 2; counter2 < counter; counter2++)
  39.         {
  40.             if(counter % counter2 == 0)
  41.             {
  42.                 prime[counter] = false;
  43.                 break;
  44.             }
  45.         }
  46.     }
  47.     printPrime();
  48. }
  49.  
  50. void sqrtPrimeMethod()
  51. {
  52.     memset(prime, true, sizeof prime);
  53.     for(int counter = 2; counter <= maxVal; counter++)
  54.     {
  55.         for(int counter2 = 2; counter2 * counter2 <= counter; counter2++)
  56.         {
  57.             if(counter % counter2 == 0)
  58.             {
  59.                 prime[counter] = false;
  60.                 break;
  61.             }
  62.         }
  63.     }
  64.     printPrime();
  65. }
  66.  
  67. void SieveMethod()
  68. {
  69.     memset(prime, true, sizeof prime);
  70.     for(int counter = 2; counter * counter <= maxVal; counter++)
  71.     {
  72.         if(!prime[counter]) continue;
  73.         for(int counter2 = counter * counter; counter2 <= maxVal; counter2 += counter)
  74.         {
  75.                 prime[counter2] = false;
  76.         }
  77.     }
  78.     printPrime();
  79. }
  80.  
  81. void comparePrimes()
  82. {
  83.     while(1)
  84.     {
  85.         cout << "Enter MaxVal: " << endl;
  86.         cin >> maxVal;
  87.         clock_t begin = clock();
  88.         naivePrimeMethod();
  89.         clock_t end = clock();
  90.         double elapsed_secs = double(end - begin) / CLOCKS_PER_SEC;
  91.         cout << setprecision(8) << "The time of Naive method is " << elapsed_secs << endl;
  92.         begin = clock();
  93.         sqrtPrimeMethod();
  94.         end = clock();
  95.         elapsed_secs = double(end - begin) / CLOCKS_PER_SEC;
  96.         cout << setprecision(8) << "The time of Sqrt method is " << elapsed_secs << endl;
  97.         begin = clock();
  98.         SieveMethod();
  99.         end = clock();
  100.         elapsed_secs = double(end - begin) / CLOCKS_PER_SEC;
  101.         cout << setprecision(8) << "The time of Sieve method is " << elapsed_secs << endl;
  102.     }
  103. }
  104.  
  105. int power(int x, int y)
  106. {
  107.     if(y == 0) return 1;
  108.     int sqrt = power(x, y / 2);
  109.     int result = sqrt * sqrt;
  110.     return y % 2 == 0 ? result : x * result;
  111. }
  112.  
  113. int main(){
  114.     comparePrimes();
  115.     return 0;
  116. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement