原题传送门:http://acm.hdu.edu.cn/showproblem.php?pid=2035
人见人爱A^B
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 21919 Accepted Submission(s): 15276
Problem Description
求A^B的最后三位数表示的整数。
说明:A^B的含义是“A的B次方”
说明:A^B的含义是“A的B次方”
Input
输入数据包含多个测试实例,每个实例占一行,由两个正整数A和B组成(1<=A,B<=10000),如果A=0, B=0,则表示输入数据的结束,不做处理。
Output
对于每个测试实例,请输出A^B的最后三位表示的整数,每个输出占一行。
Sample Input
2 3
12 6
6789 10000
0 0
Sample Output
8
984
1
Author
lcy
Source
Recommend
解法一:暴力求解,每步取模。(但是只用于b比较小的时候,如果b>=10^8估计就不行了)
#include<cstdio> #define MOD 1000; int a,b,ret; int main() { while(scanf("%d%d",&a,&b)) { if(a==0&&b==0)break; ret = 1; while(b--){ ret = ret * a%MOD; } printf("%d\n",ret); } return 0; }解法二:快速幂。对于任意的一个b都可以表示成二进制数,例如b= 45,的时候对应的二进制数(101101),那么他可以表示成45=2^5+2^3+2^2+2^0 =32+8+4+1;也就是说x^45 = x^32 * x^8 * x^4 * x^1;就是b的二进制数中对应有1的那一位就要参与运算,而参与累乘运算的项为b对应为1所在它整个二进制数的第几位,如果在第5位,那么就是x^(2^4),因此,我们要解决的问题是b对应的每个1,在第几位?我们这里用位运算,用n&1,表示二进制数最后一位是不是1,如果是1,n&1的结果是1,不是则为0.这样我们可以类比十进制整数取各位上的数字一样,而代替“/”的是“>>”运算符,表示二进制数向右移动x位,n>>1表示向右移动一位(101101>>1 = 10110);这样我觉得你应该想得到怎么做了,代码如下。
#include<cstdio> #define MOD 1000; int a,b,ret; int main() { while(scanf("%d%d",&a,&b)) { if(a==0&&b==0)break; ret = 1; while(b>0) { if(b&1)ret = ret * a % MOD; a = a*a%MOD; b>>=1; } printf("%d\n",ret); } return 0; }
<!--[if !mso]> <style> v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} p\:* {behavior:url(#default#VML);} .shape {behavior:url(#default#VML);} v\:textbox {display:none;} </style> <![endif]-->
=(101101)
相关推荐
现在,给你两个正的小数A和B,你的任务是代表大明计算出A+B的值。 Input 本题目包含多组测试数据,请处理到文件结束。 每一组测试数据在一行里面包含两个长度不大于400的正小数A和B。 Output 请在一行里面...
HDU(杭州电子科技大学在线评测系统)是一个深受程序员喜爱的在线编程练习平台,它提供了丰富的算法题目供用户挑战,帮助他们提升编程技能和算法理解能力。"hdu.rar_hdu"这个压缩包文件很可能是某位程序员整理的他在...
- **as easy as a+b** 这个短语在这类题目中通常用来暗示题目难度较低,意味着只需要简单的数学加法操作即可完成任务。 #### 标签:ACM - 标签“ACM”再次强调了本题与ACM程序设计竞赛的相关性,提示读者此题可能...
【标题】"HDU_2010.rar"是一个压缩包文件,其中包含了与"HDU 2010"相关的资源,特别是针对"HDU ACM20"比赛的编程题目。"hdu 2010"和"hdu 20"可能是该比赛的不同简称或分类,而"hdu acm20"可能指的是该赛事的第20届...
【标题】"HDU题目java实现"所涉及的知识点主要集中在使用Java编程语言解决杭州电子科技大学(HDU)在线评测系统中的算法问题。HDU是一个知名的在线编程竞赛平台,它提供了大量的算法题目供参赛者练习和提交解决方案...
hdu1001解题报告
hdu 1574 passed sorce
HDU1059的代码
【标题】"HDU.rar_hdu_hdu07_com_shownv9b_www.563hdu." 暗示这是一个与HDU(杭州电子科技大学在线编程平台)相关的压缩包,其中可能包含了该平台上的编程竞赛题目或练习题目的源代码。"hdu07"可能是某个特定题目的...
- 这个函数接收两个字符串参数`a`和`b`,代表两个待相加的大整数,以及一个整数`fn`作为结果存放的位置索引。 - 函数内部首先计算两个数的长度,然后进行逐位相加,同时考虑进位的情况。 - 结果存储在一个临时的`...
【标题】"HDU DP动态规划"涉及到的是在算法领域中的动态规划(Dynamic Programming,简称DP)技术,这是解决复杂问题的一种高效方法,尤其适用于有重叠子问题和最优子结构的问题。动态规划通常用于优化多阶段决策...
ACM HDU 题目分类 ACM HDU 题目分类是指对 HDU 在线判题系统中题目的分类,总结了大约十来个分类。这些分类将有助于编程选手更好地理解和解决问题。 DP 问题 DP(Dynamic Programming,动态规划)是一种非常重要...
hdu2101AC代码
【标题】"hdu.rar_HDU 1089.cpp_OJ题求和_hdu_horsekw5_杭电obj" 提供的信息是关于一个压缩文件,其中包含了一个名为 "HDU 1089.cpp" 的源代码文件,这个文件是为了解决杭州电子科技大学(Hangzhou Dianzi ...
hdu 5007 Post Robot 字符串枚举。 暴力一下就可以了。
【ACM HDU】指的是在ACM(国际大学生程序设计竞赛,International Collegiate Programming Contest)中,参赛者在杭州电子科技大学(Hangzhou Dianzi University,简称HDU)的在线评测系统上完成并已解决的题目集合...
if (a == 1 || a == 3 || a == 5 || a == 7 || a == 8 || a == 10 || a == 12) { days += 31; } else if (a == 2) { // 判断是否为闰年 if (year % 400 == 0) { days += 29; } else if (year % 100 == 0) { ...
【标题】:杭电ACMhdu1163 【描述】:这是一道源自杭州电子科技大学(Hangzhou Dianzi University,简称HDU)的ACM编程竞赛题目,编号为1163。这类问题通常需要参赛者利用计算机编程解决数学、逻辑或算法上的挑战,...
hdu 1166线段树代码
hdu_2102_passed_sorce