`
hellojyj
  • 浏览: 62306 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

HDU 2035 人见人爱A^B

    博客分类:
  • ACM
阅读更多

原题传送门: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次方”
 

 

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

 

lcy   |   We have carefully selected several similar problems for you:  1021 2034 1008 2033 1108
 
解法一:暴力求解,每步取模。(但是只用于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)
 
分享到:
评论

相关推荐

    hdu 1753 大明A+B

    现在,给你两个正的小数A和B,你的任务是代表大明计算出A+B的值。 Input 本题目包含多组测试数据,请处理到文件结束。 每一组测试数据在一行里面包含两个长度不大于400的正小数A和B。 Output 请在一行里面...

    hdu.rar_hdu

    HDU(杭州电子科技大学在线评测系统)是一个深受程序员喜爱的在线编程练习平台,它提供了丰富的算法题目供用户挑战,帮助他们提升编程技能和算法理解能力。"hdu.rar_hdu"这个压缩包文件很可能是某位程序员整理的他在...

    HDU ACM as easy as a+b

    - **as easy as a+b** 这个短语在这类题目中通常用来暗示题目难度较低,意味着只需要简单的数学加法操作即可完成任务。 #### 标签:ACM - 标签“ACM”再次强调了本题与ACM程序设计竞赛的相关性,提示读者此题可能...

    HDU_2010.rar_hdu 2010_hdu 20_hdu acm20

    【标题】"HDU_2010.rar"是一个压缩包文件,其中包含了与"HDU 2010"相关的资源,特别是针对"HDU ACM20"比赛的编程题目。"hdu 2010"和"hdu 20"可能是该比赛的不同简称或分类,而"hdu acm20"可能指的是该赛事的第20届...

    HDU题目java实现

    【标题】"HDU题目java实现"所涉及的知识点主要集中在使用Java编程语言解决杭州电子科技大学(HDU)在线评测系统中的算法问题。HDU是一个知名的在线编程竞赛平台,它提供了大量的算法题目供参赛者练习和提交解决方案...

    hdu1001解题报告

    hdu1001解题报告

    hdu 1574 passed sorce

    hdu 1574 passed sorce

    HDU1059的代码

    HDU1059的代码

    HDU.rar_hdu_hdu07_com_shownv9b_www.563hdu.

    【标题】"HDU.rar_hdu_hdu07_com_shownv9b_www.563hdu." 暗示这是一个与HDU(杭州电子科技大学在线编程平台)相关的压缩包,其中可能包含了该平台上的编程竞赛题目或练习题目的源代码。"hdu07"可能是某个特定题目的...

    hdu1250高精度加法

    - 这个函数接收两个字符串参数`a`和`b`,代表两个待相加的大整数,以及一个整数`fn`作为结果存放的位置索引。 - 函数内部首先计算两个数的长度,然后进行逐位相加,同时考虑进位的情况。 - 结果存储在一个临时的`...

    HDU DP动态规划

    【标题】"HDU DP动态规划"涉及到的是在算法领域中的动态规划(Dynamic Programming,简称DP)技术,这是解决复杂问题的一种高效方法,尤其适用于有重叠子问题和最优子结构的问题。动态规划通常用于优化多阶段决策...

    ACM HDU题目分类

    ACM HDU 题目分类 ACM HDU 题目分类是指对 HDU 在线判题系统中题目的分类,总结了大约十来个分类。这些分类将有助于编程选手更好地理解和解决问题。 DP 问题 DP(Dynamic Programming,动态规划)是一种非常重要...

    hdu2101解决方案

    hdu2101AC代码

    hdu.rar_HDU 1089.cpp_OJ题求和_hdu_horsekw5_杭电obj

    【标题】"hdu.rar_HDU 1089.cpp_OJ题求和_hdu_horsekw5_杭电obj" 提供的信息是关于一个压缩文件,其中包含了一个名为 "HDU 1089.cpp" 的源代码文件,这个文件是为了解决杭州电子科技大学(Hangzhou Dianzi ...

    hdu 5007 Post Robot

    hdu 5007 Post Robot 字符串枚举。 暴力一下就可以了。

    ACM HDU

    【ACM HDU】指的是在ACM(国际大学生程序设计竞赛,International Collegiate Programming Contest)中,参赛者在杭州电子科技大学(Hangzhou Dianzi University,简称HDU)的在线评测系统上完成并已解决的题目集合...

    HDU ACM 2005第几天 txt格式

    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

    【标题】:杭电ACMhdu1163 【描述】:这是一道源自杭州电子科技大学(Hangzhou Dianzi University,简称HDU)的ACM编程竞赛题目,编号为1163。这类问题通常需要参赛者利用计算机编程解决数学、逻辑或算法上的挑战,...

    hdu acm1166线段树

    hdu 1166线段树代码

    hdu_2102_passed

    hdu_2102_passed_sorce

Global site tag (gtag.js) - Google Analytics