题目的意思都很明白,看见这道题让我想起了 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; }