Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- #include<bitset>
- long long my_pow(long long a,int b,long long k)
- {
- std::bitset<32> bits(b);
- long long d=1;
- for(int i=31;i>=0;--i)
- {
- d=(d*d)%k;
- if(bits[i])
- d=(d*a)%k;
- }
- return d;
- }
- long long my_pow1(long long a,int b,long long k)
- {
- if(!b)
- return 1;
- else if(b==1)
- return a;
- else if(b%2)
- return (a*my_pow1((a*a)%k,(b-1)/2,k))%k;
- return my_pow1((a*a)%k,b/2,k)%k;
- }
- int main()
- {
- long long k=(1e+9)+7;
- int t;
- std::cin>>t;
- while(t--)
- {
- long long a,b;
- std::cin>>a>>b;
- std::cout<<"Using bitset: "<<my_pow(a,b,k)<<"\n"<<"Using exp_sq: "<<my_pow1(a,b,k)<<"\n";
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement