推荐链接:http://www.cnblogs.com/acbingo/p/4504381.html
* http://blog.csdn.net/lsldd/article/details/5506933*
题目链接:https://vjudge.net/contest/185352
密码:aa12321
#include <bits/stdc++.h>
using namespace std;
/**
- 1.快速幂取模
2.矩阵乘法
3.矩阵快速幂
4.重载运算符(矩阵快速幂)
5.快速幂
**/
const int maxn =1110;
int quick_pow(int a,int b)
{
long long int result =1;
int base =a;
while (b)
{
if(b&1)//奇数
result*=base ;
b>>=1;
base*=base ;
}
return result;
}
//(a*b)%c=(a%c)*(b%c)%c
long long int quick_pow_mod(int a,int b,int c)
{
long long int result =1;
long long int base=a;
/**
优化的写法或者说是定义
int base =a%c;//原因既是最先的注释(a*b)的内容
如果不理解,直接long long定义就好
如果定义为int 在某些情况下,可能会爆
例如:a=2374859 ; b=3029382,c=36123,
如果定义为base(int),结果会是31445,定义为long long 就会是13195,
因而,如果不理解,直接定义为long long 就好
**/
while (b)
{
if(b&1)
result=(result*base)%c;
base=(base*base)%c;
b>>=1;
}
return result ;
}
int main ()
{
int a,b,c;
while (cin>>a>>b>>c)
{
cout<<fastPower(a,b,c)<<endl;
// cout<<pow_mod(a,b,c)<<endl;
cout<<quick_pow_mod(a,b,c)<<endl;
cout <<endl;
}return 0;
}