Advertisement
Guest User

Untitled

a guest
Jun 19th, 2019
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.87 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. typedef long long ll;
  6.  
  7. ll fExp(ll a, ll b, ll m){
  8. ll ans = 1;
  9. while(b){
  10. if(b & 1){
  11. ans = ans * a % m;
  12. }
  13. a = a*a % m;
  14. b >>= 1;
  15. }
  16. return ans;
  17. }
  18.  
  19. ll phi(int a){
  20. ll ans = a;
  21. for(int i = 2; i * i <= a; ++i){
  22. if(a % i == 0){
  23. while(a % i == 0)
  24. a /= i;
  25. ans -= ans/i;
  26. }
  27. }
  28. if(a > 1) ans -= ans / a;
  29. return ans;
  30. }
  31.  
  32. // n^e mod m = n^phi(m) * n^(e mod phi(m)) mod m
  33. ll expo(ll n, ll m){
  34. if(m == 1) return 0;
  35. if(n == 1){
  36. return 1 % m;
  37. }
  38. if(n == 2){
  39. return 2 % m;
  40. }
  41. if(n == 3){
  42. return 9 % m;
  43. }
  44. if(n == 4){
  45. return 262144 % m;
  46. }
  47. ll p = phi(m);
  48. ll f = fExp(n, p, m);
  49. ll s = fExp(n, expo(n - 1, p), m);
  50. return (f * s) % m;
  51. }
  52.  
  53. int main() {
  54. ios::sync_with_stdio(0); cin.tie(0);
  55. int n, m;
  56. cin >> n >> m;
  57. cout << expo(n, m) << '\n';
  58.  
  59. return 0;
  60. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement