Advertisement
tien_noob

China remainder theorem (Bài toàn Hàn Tín điểm binh)

May 28th, 2021
153
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.57 KB | None | 0 0
  1. //Make CSP great again
  2. #include <bits/stdc++.h>
  3. #define TASK "TESTCODE"
  4. //China remainder theorem
  5. using namespace std;
  6. int n;
  7. long long a[11][2], mod = 1, sum = 0;
  8. int Phi(int p)
  9. {
  10.     int phi = p;
  11.     for (int i = 2; i * i <= p; ++ i)
  12.     {
  13.         if (p % i == 0)
  14.         {
  15.             while (p % i == 0)
  16.             {
  17.                 p/= i;
  18.             }
  19.             phi -= phi/i;
  20.         }
  21.     }
  22.     if (p != 1)
  23.     {
  24.         phi -= phi/p;
  25.     }
  26.     return phi;
  27. }
  28. long long power(long long x, long long y, long long p)
  29. {
  30.     if (y == 0)
  31.     {
  32.         return 1;
  33.     }
  34.     long long t = power(x, y/2, p);
  35.     if (y % 2 == 0)
  36.     {
  37.         return (t * t) % p;
  38.     }
  39.     else
  40.     {
  41.         return ((t * t) % p * x) % p;
  42.     }
  43. }
  44. void read()
  45. {
  46.     cin >> n;
  47.     for (int i = 1; i <= n; ++ i)
  48.     {
  49.         cin >> a[i][0] >> a[i][1];
  50.         mod *= a[i][1];
  51.     }
  52. }
  53. void solve()
  54. {
  55.     for (int i = 1; i <= n; ++ i)
  56.     {
  57.         long long N = 1;
  58.         for (int j = 1; j <= n; ++ j)
  59.         {
  60.             if (i != j)
  61.             {
  62.                 N *= a[j][1];
  63.             }
  64.         }
  65.         sum += a[i][0] * (power(N, Phi(a[i][1]) - 1, a[i][1])) * N;
  66.         sum %= mod;
  67.     }
  68.     cout << sum;
  69. }
  70. int main()
  71. {
  72.     ios_base::sync_with_stdio(false);
  73.     cin.tie(nullptr);
  74.     freopen(TASK".INP", "r", stdin);
  75.     freopen(TASK".OUT", "w", stdout);
  76.     int t = 1;
  77.     bool typetest = false;
  78.     if (typetest)
  79.     {
  80.         cin >> t;
  81.     }
  82.     for (int __ = 1; __ <= t; ++ __)
  83.     {
  84.         read();
  85.         solve();
  86.     }
  87. }
  88.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement