HDU 2035 人见人爱A^B(二分求幂,快速求幂)
2014-10-23 19:56
288 查看
题意:求A的B次方的后三位数字
思路1:常规求幂,直接取余求解
代码:
思路2:二分求幂(一般)
代码:
思路3:快速求幂(位操作)
Hint: 这不就是二分求幂么! 只不过改动了两个位操作。。。
b&1 可以判断是否为奇数,相当于 b%2==1
b=b>>1 表示b的二进制数向右移一位,相当于 b=b/2;
代码:
思路1:常规求幂,直接取余求解
代码:
#include<iostream> #include<cstdio> using namespace std; int main(){ int a,b; int ans; while(~scanf("%d%d",&a,&b)){ if(a==0&&b==0) break; a=a%1000;//底数取余 ans=1; while(b--){ ans=(ans*a)%1000;//结果取余 } printf("%d\n",ans); } return 0; }
思路2:二分求幂(一般)
代码:
#include<iostream> #include<cstdio> using namespace std; int main(){ int a,b; int ans; while(~scanf("%d%d",&a,&b)){ if(a==0&&b==0) break; a=a%1000;//底数取余 ans=1; while(b>0){//b==0时,所有的因子都已经相乘,循环结束。 if(b%2==1)//1.奇数时,多出来的一项提前放到ans里 2.b==1时,完成结果和底数的最后一次相乘 ans=(ans*a)%1000;//结果取余 a=(a*a)%1000;//二分操作 b=b/2;//1.二分 2.b==1时,b/2=0,作为结束循环的条件 } printf("%d\n",ans); } return 0; }
思路3:快速求幂(位操作)
Hint: 这不就是二分求幂么! 只不过改动了两个位操作。。。
b&1 可以判断是否为奇数,相当于 b%2==1
b=b>>1 表示b的二进制数向右移一位,相当于 b=b/2;
代码:
#include<iostream> #include<cstdio> using namespace std; int main(){ int a,b; int ans; while(~scanf("%d%d",&a,&b)){ if(a==0&&b==0) break; a=a%1000; ans=1; while(b>0){ if(b&1)//判断是否为奇数,相当于 if(b%2==1) ans=(ans*a)%1000; a=(a*a)%1000; b=b>>1;//二进制向右移一位,相当于 b=b/2; } printf("%d\n",ans); } return 0; }
相关文章推荐
- HDU 2035 人见人爱A^B(二分求幂,快速求幂)
- HDOJ 2035 人见人爱A^B-----二分快速求幂
- hdu 2035 人见人爱A^B (快速幂)
- hdu 2035 人见人爱A^B(两种解决方式:第二种快速幂取模)
- hdu 2035 人见人爱A^B (快速幂)
- HDU 2035 人见人爱A^B 快速幂取模
- hdu 1005 Number Sequence(矩阵连乘+二分快速求幂)
- 【快速幂取模】HDU 2035---人见人爱A^B
- HDU 2035 人见人爱A^B(快速幂取模 )
- HDU-2035-人见人爱A^B【快速幂】
- HDU 2035 人见人爱A^B (快速幂取模)
- Hdu 2035 人见人爱A^B【快速幂】
- hdu 2035 人见人爱A^B (快速幂取模)
- HDU—2035—人见人爱A^B—【快速幂取模】
- hdu 2035 人见人爱A^B(快速幂入门)
- 人见人爱A^B 【hdu-2035】【快速幂】
- hdu 2035 人见人爱A^B
- HDU 2035 人见人爱A^B
- HDU 2035 人见人爱A^B
- hdu 1575 Tr A(矩阵乘法快速求幂)