九度oj 题目1085:求root(N, k) 清华2010年机试题目
- 题目描述:
-
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 这道题我苦思冥想了很久,最令我头疼的就是数据的范围,2000000000的2000000000次方该有多大,如何去计算?
每次都要求N的k进制表示的各位数字之和,那么一要取模,二要求除法,这么大的数怎么做。题目考的一定不是大数的运算,肯定存在某种规律,那么这种规律是什么? 在思考的过程中,首先考虑了 1. (a*b)mod N = (a * (b mod N)) mod N;
其次也考虑到了每次都要求N的k进制表示的各位数字之和,那么最后的那个和就是 2. N mod (k-1) (这个是凭找规律看出来的) 但接下来自己的思路就比较混乱,不知道该怎么处理x的y次方的问题,想了很久也没有想出来。 最后忍不住看了看其他人的题解,
他们确实求了x的y次方,而且用的是反复平方法来求,并且在求的过程中直接做取模运算,避免了数据溢出。差距就在这里。
代码如下#include <cstdio>
#include <cstring> typedef long long ll; int root(ll x, ll y, ll k) {
ll mi = ;
while (y) {
if (y & ) {
mi = (mi*x) % k;
}
x = (x * x)%k;
y = y >> ;
}
return mi;
} int main() {
ll x, y, k;
while (scanf("%lld %lld %lld", &x, &y, &k) != EOF) {
ll ans = root(x, y, k-);
if (ans == ) {
ans = k - ;
}
printf("%lld\n", ans);
}
return ;
}关于第2点
N=a0+a1*k+a2*k^+……an*k^n N'=a0+a1+a2+……+an N-N'=a1*(k-1)+a2*(k-1)^2+a3*(k-1)^3+......+an*(k-1)^n (N-N')%(k-1)=0 (N'-N'')%(k-1)=0 ..... (N(r-)-N(r))%(k-)= 相加得(N-N(r))%(k-)= N(r)=N%(k-) 故(x^y)%(k-)就是我们要求的。 当(x^y)%(k-)=0时,注意结果为k-
九度oj 题目1085:求root(N, k) 清华2010年机试题目的更多相关文章
- 九度OJ 1085 求root(N, k) -- 二分求幂及快速幂取模
题目地址:http://ac.jobdu.com/problem.php?pid=1085 题目描述: N<k时,root(N,k) = N,否则,root(N,k) = root(N',k). ...
- 九度OJ 1525 子串逆序打印 -- 2012年Google校园招聘笔试题目
题目地址:http://ac.jobdu.com/problem.php?pid=1525 题目描述: 小明手中有很多字符串卡片,每个字符串中都包含有多个连续的空格,而且这些卡片在印刷的过程中将字符串 ...
- 九度OJ 1046:求最大值 (基础题)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:9861 解决:4013 题目描述: 输入10个数,要求输出其中的最大值. 输入: 测试数据有多组,每组10个数. 输出: 对于每组输入,请输 ...
- 九度oj 题目1083:特殊乘法 清华大学2010年机试题目
题目描述: 写个算法,对2个小于1000000000的输入,求结果. 特殊乘法举例:123 * 45 = 1*4 +1*5 +2*4 +2*5 +3*4+3*5 输入: 两个小于1000000000的 ...
- 九度OJ 1128:求平均年龄 (基础题)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:2080 解决:1084 题目描述: 班上有学生若干名,给出每名学生的年龄(整数),求班上所有学生的平均年龄,保留到小数点后两位. 输入: 第 ...
- [九度OJ]1113.二叉树(求完全二叉树任意结点所在子树的结点数)
原题链接:http://ac.jobdu.com/problem.php?pid=1113 题目描述: 如上所示,由正整数1,2,3……组成了一颗特殊二叉树.我们已知这个二叉树的最后一个结点是n.现在 ...
- 九度oj 题目1084:整数拆分 清华大学2010年机试题目
题目描述: 一个整数总可以拆分为2的幂的和,例如:7=1+2+4 7=1+2+2+2 7=1+1+1+4 7=1+1+1+2+2 7=1+1+1+1+1+2 7=1+1+1+1+1+1+1总共有六种不 ...
- 九度oj 1468 Sharing 2012年浙江大学计算机及软件工程研究生机试真题
题目1468:Sharing 时间限制:1 秒 内存限制:128 兆 特殊判题:否 提交:2687 解决:550 题目描述: To store English words, one method is ...
- 九度oj 1032 ZOJ 2009年浙江大学计算机及软件工程研究生机试真题
题目1032:ZOJ 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:4102 解决:2277 题目描述: 读入一个字符串,字符串中包含ZOJ三个字符,个数不一定相等,按ZOJ的顺序输出,当 ...
随机推荐
- 【Python图像特征的音乐序列生成】解析ABC格式的文件(修改版)
ABC格式,是一个音乐标准,ABC Plus Project最新的标准是2.x. ABC格式的音乐长成这样: X: T:Abacus % Nottingham Music Database S:By ...
- UVA 11997 K Smallest Sums (多路归并)
从包含k个整数的k个数组中各选一个求和,在所有的和中选最小的k个值. 思路是多路归并,对于两个长度为k的有序表按一定顺序选两个数字组成和,(B表已经有序)会形成n个有序表 A1+B1<=A1+B ...
- python_83_random_应用验证码
import random checkcode='' for i in range(0,5):#5位验证码 current=random.randrange(0,5) #字母 if current== ...
- opensuse 15.0 安装ctdb
问题 1 2019/05/20 15:27:14.574363 ctdb-eventd[26329]: 60.nfs: /etc/ctdb/nfs-linux-kernel-callout: line ...
- 【胎教】做AI的基础,开始学习。
昨天,找了博导,他给我聊了一下暑假任务.现总结如下: 1. 周志华, 机器学习: 2. GoodFellow,深度学习: 3. 曾更生,*****医学图像处理: 4. cs231n,公式推导,课后习题 ...
- Object-C知识点 (五) NSObject的继承关系
这篇文章主要介绍常用的继承自NSObject的类,方便朋友们查看和面试前查看使用!!! 结构图: 更多内容--> 博客导航 每周一篇哟!!! 有任何关于iOS开发的问题!欢迎下方留言!!!或者邮 ...
- iview Tooltip换行及应用
第一种: <Tooltip placement="bottom"> <Button>Multiple lines</Button> <di ...
- C++ string头文件
转载自https://blog.csdn.net/superna666/article/details/52809007/ 作者 zhenzhenjiajia888 标准c++中string类函数介绍 ...
- 16Shell脚本—计划任务服务程序
计划任务服务程序 尽管我们现在已近有了功能彪悍的脚本程序来执行一些批处理工作,但是,如果仍然需要每天凌晨两点敲击键盘回车键来执行这个脚本程序,这简直太痛苦了.为此,我们需要学习如何设置服务器的计划任务 ...
- ipvsadm分发MySQL读请求
在MySQL的部署场景中,经常使用HAproxy和ipvs来作为读请求转发的网关.ipvs的好处在于本身不需要daemon的方式来运行,而是直接作为kernel的服务来提供:当ipvs和应用程序服务器 ...