码迷,mamicode.com
首页 > 其他好文 > 详细

hdu1061(2015-N1):1.快速幂;2.找规律

时间:2018-03-01 23:32:20      阅读:246      评论:0      收藏:0      [点我收藏+]

标签:space   key   block   temp   pow   nbsp   nts   分享   dfa   

1.快速幂

原理:求a的b次方,将b转化为二进制数,该二进制位第i位的权是2^(i-1),

例如
技术分享图片
11的二进制是1011
11 = 23×1 + 22×0 + 21×1 + 2o×1
因此,我们将a11转化为算
 技术分享图片
实现
快速幂可以用位运算来实现
and 1{也就是取b的二进制最低位(即第0位) 判断b是否为奇数,是则为1}
shr 1{就是去掉b的二进制最低位(即第0位)}
C++实现为
b & 1//取b二进制的最低位,判断和1是否相同,相同返回1,否则返回0,可用于判断奇偶
b>>1//把b的二进制右移一位,即去掉其二进制位的最低位.
递归版:
ll pow(ll a,ll i){
  if (i==0) return 1;
  int temp=pow(a,i>>1);
  temp=temp*temp%MOD;
  if (i&1) temp=(ll)temp*a%MOD;
  return temp%MOD;
}
非递归版:
ll f(ll a,ll b,ll n){
  int t,y;
  t=1; y=a;
  while (b!=0){
    if (b&1==1) t=t*y%n;
    y=y*y%n; b=b>>1;
  }
  return t;
 

hdu1061(2015-N1):1.快速幂;2.找规律

标签:space   key   block   temp   pow   nbsp   nts   分享   dfa   

原文地址:https://www.cnblogs.com/BlueBlue-Sky/p/8490659.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!