给出一个整数N,输出N^N(N的N次方)的十进制表示的值,如果这个值超过了214748364,就求结果对214748364的余数。
输入格式:
一个整数T,代表输入数据组数。接下来T行每行一个整数N(1 <= N <= 10^9)。
输出格式:
输出N^N对214748364的余数
输入样例:
2
2
3
输出样例:
4
27
思路:用快速幂的模板就可以了,注意用long long ,不然有一个测试点不对
#include<bits/stdc++.h>
using namespace std;
const int m=214748364;
int main()
{
long long n,p;
cin>>p;
while(p--)
{
cin>>n;
long long ans=1;
long long k=n;
while(k>0)
{
if(k&1)
ans=ans*n%m;
n=n*n%m;
k>>=1;
}
cout<<ans<<endl;
}
return 0;
}
递归写法:
#include<bits/stdc++.h>
using namespace std;
#define p 214748364
typedef long long LL;
LL mi(LL a,LL b)
{
if(b==1)
return a%p;
LL ans=mi(a,b/2);
ans=ans*ans%p;
if(b&1)
ans=ans*a%p;
return ans;
}
int main()
{
int n;
LL a;
cin>>n;
while(n--)
{
cin>>a;
cout<<mi(a,a)<<endl;
}
return 0;
}