Problem F: 最右边的数字

  • 快速幂求法(快速幂取模)
    a,b,c || a^b%c
    b若为奇数,a^(b-1)/2

Description

给你两个正整数N和M,求出N^M的最右边的数字是多少。

Input

输入包含多组测试用例,第一个行是一个整数T代表有T组测试。

接下来的T行每行包含两个正整数N,M(1<=N,M<=1,000,000,000)由空格分开。

Output

对每组测试用例,输出N^M最右边的数字。

Sample Input

4
2 3
3 3
4 3
5 3

Sample Output

8
7
4
5

HINT

2^3 = 8 最右边的数为8

3^3 = 27 最右边的数为7

4^3 = 64 最右边的数为4

5^3 = 125 最右边的数为5

#include<iostream>
#include<algorithm>
using namespace std;
int fast_pow(int a,int b)   //快速模幂
{
    int tag=a;
    int ans=1;
    while(b)
    {
        if(b&1)
            ans=(ans*tag)%10;
        tag=(tag*tag)%10;
        b>>=1;
    }
    return ans;
}
int main()
{
    intn,m,t;
    while(cin>>t)
    {
        inta[t];
        for(int i=0;i<t;i++)
        {
            cin>>n>>m;
            n=n%10;
            a[i]=fast_pow(n,m)%10;
        }
        for(int j=0;j<t;j++)
            cout<<a[j]<<endl;
    }
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章