Advertisement
karbaev

tail

Oct 10th, 2015
128
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.44 KB | None | 0 0
  1. #include <iostream>
  2. #include <cmath>
  3.  
  4. using namespace std;
  5.  
  6. //умножение по модулю
  7. unsigned long long xmult(unsigned long long a, unsigned long long b, unsigned long long mod){
  8.     unsigned long long res = 0;
  9.     a %= mod;
  10.     b %= mod;
  11.     while(b) {
  12.         if(b&1){//если нечетное
  13.             res += a;
  14.             res %= mod;
  15.         }
  16.         b >>= 1;
  17.         a <<= 1;
  18.         a %= mod;
  19.     }
  20.     return res;
  21. }
  22.  
  23. //возведение в степень по модулую
  24. unsigned long long xpow(unsigned long long num, unsigned pow, unsigned long long mod){
  25.     unsigned long long res;
  26.     unsigned long long n=num;
  27.     for(res=1; pow>0; pow>>=1){
  28.         if (pow&1) //если нечетная
  29.         res=xmult(res%mod,n%mod,mod);
  30.         n=xmult(n%mod,n%mod,mod);
  31.     }
  32.     return res;
  33. }
  34.  
  35.  
  36. /*
  37. Найти последние n цифр числа (2014^2015)^m.
  38. В единственной строке даны два целых числа, разделенных пробелом: n (1<=n<18) и m
  39. (0<=m<=2016).
  40. Формат выходного файла
  41. Одно целое число из n знаков - ответ на задачу
  42. */
  43. int main(int argc, char* argv[]){
  44.     unsigned long long mod;
  45.     int n,m;
  46.     cin>>n>>m;
  47.     int i=1;
  48.     while(i<n){
  49.         mod*=10;
  50.         i++;
  51.     }
  52.     unsigned long long z=xpow(2014, 2015, mod);
  53.     cout<<xpow(z, m, mod);
  54.     return 0;
  55. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement