Advertisement
Guest User

Algebra Homework, 2a

a guest
Apr 5th, 2020
157
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.13 KB | None | 0 0
  1. //Dimitar Atanasov 45382
  2.  
  3. //2143 5003 9293 1613 4493
  4.  
  5. //Date: 05.04.2020
  6.  
  7. #include <iostream>
  8.  
  9. using namespace std;
  10.  
  11. int main()
  12. {
  13.     const int n = 10000;
  14.     bool isPrime[n + 1];
  15.     memset(isPrime, true, sizeof(isPrime)); //set all values to true
  16.    
  17.     //I use a sieve for O(1) isPrime check
  18.     for (int p = 2; p*p <= n; p++)
  19.     {
  20.         if (isPrime[p] == true)
  21.         {
  22.             for (int i = p * p; i <= n; i += p)
  23.                 isPrime[i] = false;
  24.         }
  25.     }
  26.     //Theorem: The number between every pair of prime twins is divisable by 6(because it is divisable by 2 and 3)
  27.     //Thats why when we iterrate through twin primes we start with 6k and add 6 in every step
  28.     //where k = 2, because 5 and 7 are illegal by definition of the problem
  29.     int maxi = sqrt(n); // i*(i+2) < 10000
  30.     int p1;
  31.     int p2;
  32.     int p; //result number
  33.     for(int i = 6*2; i < maxi; i += 6)
  34.     {
  35.         p1 = i - 1;
  36.         p2 = i + 1;
  37.         if(isPrime[p1] && isPrime[p2]) //start searching for p, only if p1 & p2 are prime twins
  38.             for(int j = 1; (p1 * p2 * j) - 2 < n; j++)
  39.             {
  40.                 p = (p1 * p2 * j) - 2;
  41.                 if(isPrime[p] && p % 10 == 3)
  42.                     cout << p << " ";
  43.             }
  44.     }
  45.     return 0;
  46. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement