Alex_tz307

MATEMATICA

Aug 16th, 2021
933
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.38 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. const int MAXN = 1e6 + 1;
  6. bitset<MAXN> compus;
  7. vector<int> prime;
  8. int fact[MAXN], F[MAXN];
  9.  
  10. bool is_prime(int x) { /// true - prim / false - compus
  11.   if (x == 0 || x == 1)
  12.     return false;
  13.   if (x == 2 || x == 3)
  14.     return true;
  15.   if (x % 2 == 0 || x % 3 == 0)
  16.     return false;
  17.   int rad = sqrt(x);
  18.   for (int d = 5; d <= rad; d += 6)
  19.     if (x % d == 0 || x % (d + 2) == 0)
  20.       return false;
  21.   return true;
  22. }
  23.  
  24. void linear_sieve() {
  25.   compus[0] = compus[1] = true;
  26.   for (int i = 2; i < MAXN; ++i) {
  27.     if (!compus[i])
  28.       prime.emplace_back(i);
  29.     for (size_t j = 0; j < prime.size() && i * prime[j] < MAXN; ++j) {
  30.       compus[i * prime[j]] = true;
  31.       if (i % prime[j] == 0)
  32.         break;
  33.     }
  34.   }
  35. }
  36.  
  37. void sieve() {
  38.   compus[0] = compus[1] = true;
  39.   for (int i = 4; i < MAXN; i += 2)
  40.     compus[i] = true;
  41.   for (int i = 3; i * i < MAXN; i += 2)
  42.     if (!compus[i])
  43.       for (int j = i * i; j < MAXN; j += 2 * i)
  44.         compus[j] = true;
  45. }
  46.  
  47. void calc_fact() { /// fact[x] - cel mai mic divizor prim al lui x
  48.   for (int i = 2; i < MAXN; ++i)
  49.     if (fact[i] == 0) {
  50.       fact[i] = i;
  51.       if (i > 1000)
  52.         continue;
  53.       for (int j = i * i; j < MAXN; j += i)
  54.         if (fact[j] == 0)
  55.           fact[j] = i;
  56.     }
  57. }
  58.  
  59. vector<pair<int,int>> desc(int x) {
  60.   vector<pair<int,int>> a;
  61.   while (x > 1) {
  62.     int d = fact[x];
  63.     a.emplace_back(d, 0);
  64.     while (x % d == 0) {
  65.       ++a.back().second;
  66.       x /= d;
  67.     }
  68.   }
  69.   return a;
  70. }
  71.  
  72. int phi(int x) { /// Indicatorul lui Euler in O(sqrt(n))
  73.   int ans = x, d = 2;
  74.   while (x > 1) {
  75.     if (x % d == 0) {
  76.       ans = ans / d * (d - 1);
  77.       while (x % d == 0)
  78.         x /= d;
  79.     }
  80.     if (d == 2)
  81.       d = 3;
  82.     else d += 2;
  83.     if (d * d > x)
  84.       d = x;
  85.   }
  86.   return ans;
  87. }
  88.  
  89. void phi_sieve() {
  90.   for (int i = 1; i < MAXN; ++i)
  91.     F[i] = i;
  92.   for (int i = 2; i < MAXN; ++i)
  93.     if (F[i] == i)
  94.       for (int j = 1; i * j < MAXN; ++j)
  95.          F[i * j]= F[i * j] / i * (i - 1);
  96. }
  97.  
  98. int Pow(int x, int n) {
  99.   int ans = 1;
  100.   while (n) {
  101.     if (n & 1)
  102.       ans *= x;
  103.     x *= x;
  104.     n >>= 1;
  105.   }
  106.   return ans;
  107. }
  108.  
  109. int main() {
  110.   ios_base::sync_with_stdio(false);
  111.   cin.tie(nullptr);
  112.   cout.tie(nullptr);
  113.   /// linear_sieve();
  114.   /// sieve();
  115.   /// calc_fact();
  116.   /// phi_sieve();
  117.   return 0;
  118. }
  119.  
Advertisement
Add Comment
Please, Sign In to add comment