Advertisement
montimaj

LARGE POW

Apr 3rd, 2014
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.73 KB | None | 0 0
  1. #include<iostream>
  2. #include<bitset>
  3. long long my_pow(long long a,int b,long long k)
  4. {
  5.     std::bitset<32> bits(b);
  6.     long long d=1;
  7.     for(int i=31;i>=0;--i)
  8.     {
  9.         d=(d*d)%k;
  10.         if(bits[i])
  11.             d=(d*a)%k;
  12.     }
  13.     return d;
  14. }
  15. long long my_pow1(long long a,int b,long long k)
  16. {
  17.     if(!b)
  18.         return 1;
  19.     else if(b==1)
  20.         return a;
  21.     else if(b%2)
  22.         return (a*my_pow1((a*a)%k,(b-1)/2,k))%k;
  23.     return my_pow1((a*a)%k,b/2,k)%k;
  24. }
  25. int main()
  26. {
  27.     long long k=(1e+9)+7;
  28.     int t;
  29.     std::cin>>t;
  30.     while(t--)
  31.     {
  32.         long long a,b;
  33.         std::cin>>a>>b;
  34.         std::cout<<"Using bitset: "<<my_pow(a,b,k)<<"\n"<<"Using exp_sq: "<<my_pow1(a,b,k)<<"\n";
  35.     }
  36. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement