传送门
题目的问题就是求N^N
一般我们会直接用for循环,但
远远超出1秒计算机的计算量,所以我们就要用到快速幂了;
先放模板
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
int a;
cin>>a;
while(a--) {
long long b, c, d = 1;
cin >> b;
c = b;
while(c > 0) {
if(c & 1) d = (d*b)%10;
b = (b*b)%10;
c >>= 1;
}
cout << d << endl;
}
return 0;
}
while(b)
{
if(a & 1) d = (d*a)%10;
a = (a*a)%10;
b >>= 1;
}
求a^b
b可以表示成二进制数
我们可以求得
a^1
a^2
a^4
a^8
…
每两个相乘就是幂相加,就能够表示成b。