题目的意思都很明白,看见这道题让我想起了 hdu 的 1061 http://acm.hdu.edu.cn/showproblem.php?pid=1061 差不多的一个题目,都是让求最右位的数字,1061 是 N^N,而这道题是N^M。无论是N^N还是N^M,最右面的那个数字,只于N的个位数和M有关,并且是循环的,也就是说当M超过4的时候,所求的那个结果就开始循环了(比如7^66==7^2所求的个位数是相同的)
知道这个规律后,这两道题做起来就很easy了。
今天终于知道为什么会有这个规律了,原来是因为欧拉函数的原因,欧拉函数:如果 a ,p 是互素的,那么gcd(a,p) = 1;并且对于p,如果在小于p 的正整数里与p互素 的个数为x ,则有 pow(a,x) = 1(mod p);所以呢对于这道题目因为是求个位数,所以只需对10取余,又因为10的欧拉函数值为4所以 pow(n,4) = 1 (mod 10);所以呢只需要用m 对 4 取余看余数就可以解决这道题目了
#include<stdio.h>
int main()
{
int n,m,i,sum;
while(scanf("%d%d",&n,&m)!=EOF)
{
n=n%10;
m=m%4;
if(m==0)m=4;
sum=1;
for(i=1;i<=m;i++)
sum*=n;
printf("%d\n",sum%10);
}
return 0;
}