题意:N^N的最后一位N(1<=N<=1,000,000,000).
思路:
1.可以边乘边模10。
2.二分取模N^N = N ^ N/2 * N^N/2
记得二分的时候
如果n为奇数
f(n) = f(n/2) * f(n / 2) * n.
如果n为偶数
f(n) = f(n/2) * f(n/2) 可以写成 t = f(n/2) ,f(n) = t * t 这样节省了一半的时间
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int f(__int64 a,int n,int m)
{
if(n == 1)
return a % m;
else if( n % 2 == 0)
{
int k = f(a,n/2,m) % m;
return (k*k) % m;
}
else
{
int k = f(a,n/2,m)%m;
return (k*k*a) % m;
}
}
int main()
{
int d;
scanf("%d",&d);
while(d--)
{
__int64 n;
scanf("%I64d",&n);
int m = f(n,n,10);
printf("%d\n",m);
}
return 0;
}