九度oj-1085-求root(N,k)
2015-12-19 21:32
190 查看
时间限制:1 秒
内存限制:32 兆
特殊判题:否
提交:1412
解决:526
题目描述:
N<k时,root(N,k) = N,否则,root(N,k) = root(N',k)。N'为N的k进制表示的各位数字之和。输入x,y,k,输出root(x^y,k)的值 (这里^为乘方,不是异或),2=<k<=16,0<x,y<2000000000,有一半的测试点里 x^y 会溢出int的范围(>=2000000000)
输入:
每组测试数据包括一行,x(0<x<2000000000), y(0<y<2000000000), k(2<=k<=16)
输出:
输入可能有多组数据,对于每一组数据,root(x^y, k)的值
样例输入:
样例输出:
来源:2010年清华大学计算机研究生机试真题
快速幂取模
内存限制:32 兆
特殊判题:否
提交:1412
解决:526
题目描述:
N<k时,root(N,k) = N,否则,root(N,k) = root(N',k)。N'为N的k进制表示的各位数字之和。输入x,y,k,输出root(x^y,k)的值 (这里^为乘方,不是异或),2=<k<=16,0<x,y<2000000000,有一半的测试点里 x^y 会溢出int的范围(>=2000000000)
输入:
每组测试数据包括一行,x(0<x<2000000000), y(0<y<2000000000), k(2<=k<=16)
输出:
输入可能有多组数据,对于每一组数据,root(x^y, k)的值
样例输入:
4 4 10
样例输出:
4
来源:2010年清华大学计算机研究生机试真题
快速幂取模
#include<iostream> using namespace std; int root(long long x,long long y,int k) { int t=1; while(y) { if(y & 1) t=t*x%k; x=x*x%k; y>>=1; } return t; } int main() { long long x,y; int k,z; while(cin>>x>>y>>k) { z=root(x,y,k-1); if(z==0) cout<<k-1<<endl; else cout<<z<<endl; } return 0; }
相关文章推荐
- 九度1526
- 九度1025:最大报销额 java
- 九度 题目1026:又一版 A+B java
- 【九度】题目1006:ZOJ问题
- 【九度】题目1005:Graduate Admission
- 【九度】题目1004:Median
- 【九度】题目1003:A+B
- 【九度】题目1002:Grading
- 【九度】题目1001:A+B for Matrices
- 【九度】题目1000:计算a+b
- 三、Hash练习_1156_1
- 三、Hash_1081_1
- 给定两个整数A和B,其表示形式是:从个位开始,每三位数用逗号","隔开。
- 并查集
- JOBDU Q1001
- JOBDU Q1002
- JOBDU Q1003
- JOBDU Q1004
- 九度题目1431解
- 九度--第1001题:A+B for Matrices