Advertisement
Guest User

Untitled

a guest
Apr 7th, 2018
27
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.81 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3.  
  4. long long pow(int x, int y)
  5. {
  6.     if(y == 0)
  7.         return 1;
  8.     if(x == 0)
  9.         return 0;
  10.     long long ret = 1;
  11.     for(int i = 0; i < y; i++)
  12.         ret *= x;
  13.     return ret;
  14. }
  15.  
  16. int sqrt(int x)
  17. {  
  18.     int n = 0;
  19.     if(x < 100){
  20.         while(n * n < x)
  21.             n++;
  22.         return n;
  23.     }  
  24.     while(pow(6 * pow(10, n), 2) < x)
  25.         n++;
  26.     double tmp = x;
  27.     double y = 1;
  28.  
  29.     while(tmp - y > 1){
  30.         tmp = (tmp + y) / 2;
  31.         y = x/tmp;
  32.     }
  33.     int ret = tmp;
  34.     return (ret * ret < x) ? ret + 1 : ret;
  35. }
  36. class PrimeNumbers
  37. {
  38. private:
  39.     std::vector<int> primes;
  40. public:
  41.     PrimeNumbers()
  42.     {
  43.         primes = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43};
  44.     }
  45.     bool isPrime(int n)
  46.     {  
  47.         if(n < 2)
  48.             return false;
  49.         if(n < primes.back()){
  50.             for(int i = 0; i < primes.size(); i++){
  51.                 if(n == primes[i])
  52.                     return true;
  53.             }
  54.             return false;
  55.         }
  56.         int max = sqrt(n);
  57.         if(max < primes.back()){
  58.             for(int i = 0; primes[i] < max; i++){
  59.                 if(n % primes[i] == 0)
  60.                     return false;
  61.             }
  62.             return true;
  63.         }
  64.         int i = primes.size() - 1;
  65.         generatePrimesTo(max);
  66.         for(i; i < primes.size(); i++){
  67.             if(n % primes[i] == 0)
  68.                 return false;
  69.         }
  70.         return true;
  71.     }
  72.     void generatePrimesTo(int n)
  73.     {
  74.         if(n < primes.back())
  75.             return;
  76.        
  77.         int i = primes.back() + 2;
  78.         for(i; i <= n; i += 2){
  79.             if(isPrime(i))
  80.                 primes.push_back(i);
  81.         }
  82.     }
  83.     bool isSumOfPrimes(int n)
  84.     {  
  85.         if(n < 4)
  86.             return false;
  87.         int max = n / 2 + 1;
  88.         generatePrimesTo(n);
  89.         for(int i = 0; primes[i] <= max; i++){
  90.             if(isPrime(n - primes[i])){
  91.                 return true;
  92.             }
  93.             if(i == primes.size() - 1)
  94.                 max = 0;
  95.         }
  96.         return false;
  97.     }
  98. };
  99.  
  100.  
  101.        
  102.    
  103. int main()
  104. {
  105.     PrimeNumbers* test = new PrimeNumbers();
  106.     int n = 0;
  107.     while(n > -1){
  108.         std::cin >> n;
  109.         std::cout << test->isSumOfPrimes(n) << "\n";
  110.     }
  111.     return 0;
  112. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement