fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. using ll = long long;
  4.  
  5. // `mod` diye yeni bir parametre geldi.
  6. // Sonucun `mod`a bölümünden kalanı döndüreceğiz.
  7. ll bin_exp(ll taban, ll us, ll mod) {
  8. // İpucu: Uygunsa Fermat'ın küçük teoremini, üssü küçültmek için kullanabilirsiniz.
  9.  
  10. // ÖNEMLİ: Başta şunu yapıyoruz ki sonradan bir overflow meydana gelmesin.
  11. // Basit bir modüler aritmetik bilgisini uyguluyoruz.
  12. taban %= mod;
  13.  
  14. ll cevap = 1;
  15.  
  16. while (us) {
  17. if (us % 2) {
  18. (cevap *= taban) %= mod;
  19. }
  20.  
  21. (taban *= taban) %= mod;
  22. us /= 2;
  23. }
  24.  
  25. return cevap;
  26. }
  27.  
  28. int main() {
  29. ll taban, us, mod;
  30. cin >> taban >> us >> mod;
  31. cout << taban << "^" << us << " mod " << mod << " = " << bin_exp(taban, us, mod) << "\n";
  32. }
Success #stdin #stdout 0s 5304KB
stdin
1000000000000000000 1000000000000000000 1000000007
stdout
1000000000000000000^1000000000000000000 mod 1000000007 = 504853526