hdu ACM Steps 1.2.6 Rightmost Digit

快速幂。

。。。我居然把快速幂都忘记了,重新复习一下。

首先底数为k次数e可以用二进制表示。

如果e的最后一位为0,那么 k^e = (k^2)^(e/2)

如果e的最后以为为0,那么 k^e = (k^2)^(e/2)*k

于是快速幂就复习完了。

#include<cstdio>
const int mod = 10;

int T,n;

int power(int k,int e) {
    int res=1;
    while(e) {
        if(e&1) res=res*k%mod;
        k=k*k%mod;
        e>>=1;
    }
    return res;
}

int main() {
    scanf("%d",&T);
    while(T--) { 
        scanf("%d",&n);
        printf("%d\n",power(n%mod,n));    
    }
    return 0;
}
posted @ 2017-06-11 20:36  invoid  阅读(121)  评论(0)    收藏  举报