fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. // Cho 3 số nguyên a, b, c
  5. // nếu a đồng dư b (mod c) thì có nghĩa là: a và b có cùng số dư khi mod cho c
  6.  
  7. // Ví dụ:
  8. // Cho c = 3
  9. // thì ta có:
  10. // 5 đồng dư với 8 (mod 3)
  11.  
  12. // 5 mod 3 = 2
  13. // 8 mod 3 = 2
  14.  
  15. // a, b có thể rất lớn (<= 1e18), kiểu dữ liệu long long, nhưng c thì tầm <= 1e9
  16. // (a + b) % c = [(a % c) + (b % c)] % c
  17. // (a - b) % c = [(a % c) - (b % c) + c] % c
  18. // (a * b) % c = [(a % c) * (b % c)] % c
  19. // (a / b) % c =
  20.  
  21. // [a * (1 / b)] % c
  22. // phải tìm được một thằng x mà đồng dư với (1/b) (mod c)
  23. // => (a * x) % c
  24.  
  25. // tìm nghịch đảo module của b (mod c):
  26. // nếu c nguyên tố: b^(c - 2) (mod c)
  27.  
  28. // với p nguyên tố:
  29. // a^(p - 1) = 1 (mod p) (định lí Fermat nhỏ)
  30. // nhân 2 vế với a^(-1) ta có:
  31. // a^(p-2) = a^(-1) (mod p)
  32.  
  33. // một số tính chất của đồng dư:
  34. // a = b (moc c)
  35. // <=> a + d = b + d (mod c)
  36. // <=> a - d = b - d (mod c)
  37. // <=> a * d = b * d (mod c)
  38. // <=> a / d = b / d (mod c) [điều kiện gcd(d, c) = 1]
  39.  
  40. // a = b (mod c)
  41. // <=> a - b = 0 (mod c)
  42. // => a - b chia hết cho c hay c là ước của a - b
  43.  
  44. // a = x (mod b)
  45. // <=> a = k * b + x (k thuộc Z)
  46.  
  47. // 8 = 2 (mod 3)
  48. // 8 = 2 * 3 + 2
  49.  
  50. // a mob b = a - [a / b] * b
  51.  
  52. #define int long long
  53.  
  54. signed main() {
  55. ios::sync_with_stdio(0); cin.tie(0);
  56. }
Success #stdin #stdout 0.01s 5292KB
stdin
Standard input is empty
stdout
Standard output is empty