就是说,我以为如下这种方法会超时,但事实证明AC了...(sad)还是去尝试!
思路不是很好想(小白水平,看题解才想到)
举个例子,m=5,k=10
那么答案就是:5^1 * 5^2 *5^4 *5^8 *... 5*512
5^2是5^1的平方,后面的数依次是前一个数的平方
那么,循环即可,代码如下:
#include<bits/stdc++.h>
using namespace std;
const int cnt=100000007;
int main( )
{
int m,k;
cin>>m>>k;
if(k==0){cout<<"1";return 0;}
long long int res=m;
long long int temp=m;
for(int i=1;i<k;i++){
temp=(temp*temp)%cnt;
res=(res*temp)%cnt;
}
cout<<res;
return 0;
}
注意k=0的特殊情况~