hdu 1097 解题报告

题目的意思都很明白,看见这道题让我想起了 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;
}
原文地址:https://www.cnblogs.com/fxh19911107/p/2262082.html