Advertisement
Hezov

div9 nerdarena

Feb 11th, 2025
38
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.33 KB | None | 0 0
  1. /// O solutie care verifica toate patratele perfecte pana la n ia TLE
  2. #include <fstream>
  3. using namespace std;
  4. ifstream cin("9div.in");
  5. ofstream cout("9div.out");
  6. // Numarul nostru poate veni in doua forme :
  7. // a) x^8, unde x este prim
  8. // b) x^2*y^2, unde x, y sunt prime si y>x
  9. long long primes[20000], p;
  10. bool isPrime(int x)
  11. {
  12.     if(x<2) return false;
  13.     if(x==2||x==3) return true;
  14.     if(x%2==0||x%3==0) return false;
  15.     for(int i = 5;i*i<=x;i+=6)
  16.         if(x%i==0||x%(i+2)==0) return false;
  17.     return true;
  18. }
  19. void genPrimes()
  20. {
  21.     for(int i = 1;i<=31623;i++) // sqrt(1e9)
  22.         if(isPrime(i))
  23.             primes[++p] = i;
  24. }
  25. long long exp(long long x, long long p)
  26. {
  27.     long long sol = 1;
  28.     while(p)
  29.     {
  30.         if(p%2==1)
  31.             sol = sol * x;
  32.         x = x * x;
  33.         p/=2;
  34.     }
  35.     return sol;
  36. }
  37. int main()
  38. {
  39.     genPrimes();
  40.    // cout << p;
  41.     long long n, nr = 1, sol = 0;
  42.     cin >> n;
  43.     for(int i = 1;i<=p&&primes[i]*primes[i]*primes[i]*primes[i]<=n;i++)
  44.     {
  45.          for(int j = i+1;j<=p && primes[j]*primes[j]*primes[i]*primes[i] <= n;j++)
  46.          {
  47.             sol++;
  48.             //cout << primes[i] * primes[i] * primes[j]*primes[j] << ' ';
  49.          }
  50.     }
  51.     while(exp(primes[nr],8)<=n)
  52.         sol++,nr++;
  53.     //cout << p;
  54.     cout << sol << '\n';
  55.     return 0;
  56. }
  57.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement