zoukankan      html  css  js  c++  java
  • HDU 2035-人见人爱A^B(浅谈快速幂)

    人见人爱A^B

    Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
    Total Submission(s): 69289 Accepted Submission(s): 45915

    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

    题目链接

    这道题是HDU上的题目,可以用快速幂做,最后%1000就可以。AC代码

    #include <bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    int main()
    {
    	ll fastpow(ll,ll);
    	ll a,b;
    	while(cin>>a>>b)
    	{
    		if(a==0&&b==0)
    		  break;
    		ll num=fastpow(a,b);
    	    cout<<(num%1000)<<endl; 
    	}
    	return 0;
    }
    ll fastpow(ll a,ll b)
    {
    	ll ans=1;
    	while(b!=0)
    	{
    		if(b&1)
    		  ans=(ans*a)%1000;//不要忘了随时对1e3取模
    		a=(a*a)%1000;
    		b>>=1;
    	}
    	return ans;
    }
    

    今天要讲的主要是快速幂,用3的9次方为例,按照一般算法的话我们要乘9次3才能得到,为了省时间,用快速幂算法,我们都知道任何一个数都可以用二进制数表示出来,例子中所说的9次方,可以写成3的8次方*3的一次方,也就是9可以写成1001,分别对应的是3的一次方,平方,四次方和八次方,这样,我们不断让3进行平方,如果遇到1则乘到ans里面,如果遇到0则继续平方,幂每次右移一位(等价于/2,向下取整),直到最后的幂等于0。返回ans即可。快速幂模板:

    ll fastpow(ll a,ll b)
    {
    	ll ans=1;
    	while(b!=0)
    	{
    		if(b&1)//判断这位是不是1
    		  ans*=a;
    		a*=a;//平方
    		b>>=1;//每次右移一位
    	}
    	return ans;
    }
    
  • 相关阅读:
    ABAP POH和POV事件中 获得屏幕字段的值
    SAP 发送邮件 面向对象
    SAP文件的上传下载 SMW0,二进制文件
    SAP smartform 实现打印条形码
    SAP GB01替代 程序:RGUGBR00
    SAP问题【转载】
    物料库存确定组
    SAP ECC EHP7 RFC 发布成WebService
    NUMBER_GET_NEXT 获取编号 遇到关于按年度编号的问题
    SAP 参照sto订单创建外向交货BAPI
  • 原文地址:https://www.cnblogs.com/Hayasaka/p/14294319.html
Copyright © 2011-2022 走看看