Problem F: 最右边的数字
2015-08-12 18:22
204 查看
快速幂求法(快速幂取模)
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
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; }
相关文章推荐
- Hadoop YARN新特性—label based scheduling
- Makefile中用宏定义进行条件编译(gcc -D)/在Makefile中进行宏定义-D
- Xtradb+Haproxy高可用数据库集群(四)集群zabbix监控篇
- Xtradb+Haproxy高可用数据库集群(四)集群zabbix监控篇
- Xtradb+Haproxy高可用数据库集群(四)集群zabbix监控篇
- CELL⾃适应⾼度
- WCF问题集锦:基础连接已经关闭 接收时发生错误
- C++易混淆的一点
- Java Servlet完全教程
- Chapter 16 notification iOS 8 -Swift Programming cookBook 读书笔记
- linux下用cmake
- css写三角形
- 自定义UITableViewCell(2) 多个自定义cell
- iOS到Android到底有多远
- 黑马程序员——面向对象(this关键字)-第11天
- 学习OpenGL好地址。
- findviewbyid()值为空的问题
- typedef的语法描述
- php中abstract与interface的区别
- iOS_关联使用(一)