HDU1061-Rightmost Digit(快速幂取模)

来源:互联网 发布:部落冲突药水升级数据 编辑:程序博客网 时间:2024/05/02 00:59
Problem Description
Given a positive integer N, you should output the most right digit of N^N.
 

Input
The input contains several test cases. The first line of the input is a single integer T which is the number of test cases. T test cases follow.
Each test case contains a single positive integer N(1<=N<=1,000,000,000).
 

Output
For each test case, you should output the rightmost digit of N^N.
 

Sample Input
234
 

Sample Output
76
Hint
In the first case, 3 * 3 * 3 = 27, so the rightmost digit is 7.In the second case, 4 * 4 * 4 * 4 = 256, so the rightmost digit is 6.
 
 
看到这道题,水神看到笑了;规律弟看了笑了;数学帝看到笑了;
 
快速幂版本:
 
 
 
#include<iostream>#include<string.h>#include<stdio.h>#include<ctype.h>#include<algorithm>#include<stack>#include<queue>#include<set>#include<math.h>#include<vector>#include<map>#include<deque>#include<list>using namespace std;int pow(int a,int b,int mod){    int result=1;    while(b)    {        if(b&1)            result=(result*a)%mod;        a=(a*a)%mod;        b>>=1;    }    return result%mod;}int main(){    int t,n;    scanf("%d",&t);    while(t--)    {        scanf("%d",&n);        int t=pow(n%10,n,10);        printf("%d\n",t);    }    return 0;}

 
快速幂:(比起上述代码少了取模环节)
#include<iostream>#include<string.h>#include<stdio.h>#include<ctype.h>#include<algorithm>#include<stack>#include<queue>#include<set>#include<math.h>#include<vector>#include<map>#include<deque>#include<list>using namespace std;int pow(int a,int b){    int result=1;    while(b)    {        if(b&1)            result=result*a;        a=a*a;        b>>=1;    }    return result;}int main(){    int t,n,m;    while(scanf("%d%d",&m,&n)!=EOF)    {        int t=pow(m,n);        printf("%d\n",t);    }    return 0;}