#include<cstdio>
#include<cstring>
using namespace std;
int Pow(int a,int b)
{
int ans=1;
while(b)
{
if(b&1) ans=ans*a%10;
a*=a%10;
b>>=1;
}
return ans;
}
int main ()
{
char str1[1000],str2[1000];
while(~scanf("%s %s",str1,str2))
{
if(str1[0]=='0'&&str2[0]=='0') break;
int m=str1[strlen(str1)-1]-'0',n;
if(strlen(str2)==1) n=str2[0]-'0';
else
{
int k=strlen(str2)-1;
n=(str2[k-1]-'0')*10+str2[k];
}
int ans=Pow(m,n);
printf("%d\n",ans);
}
return 0;
}
求解m^n的最后一位,m,n的范围为[1,1e1000];
一般情况下,2,,3,7,8是以每4个连续的次方为一个循环,4,9是以每2个连续的次方为一个循环,5,6是任何次方为底数的一个循环。
从上边可以知道,取m的最后一位k,取n的最后两位d ans=k^d%10;