风君雪科技博客

  • 首页
  • 业界
  • 前端
  • 运维
  • 建站
  • 软件
  • 生活
  • 后端
  • 创投
  • 运营
  • 程序人生
    • 影视
    • 游戏
    • 句子
    • 资源
  • 其他
    • 说说
  • 关于本站
  1. 首页
  2. 软件
  3. 关于快速幂

关于快速幂

2023年3月19日 2点热度 0人点赞 0条评论

快速幂是个快速计算幂次的算法,原理很简单:

 a^b=a*a*a*a*a*......*a (b个a 相乘) 如果直接计算要做 b-1 次乘法。

可以利用幂运算的性质: a^b=(a^c)*(a^d)=a^(c+d)  其中b=c+d

如果把b平均分为两份,每份的数量为c=d=b/2, a^c和a^d的值一样,就可以重复利用。

这样分一次就只要做 b/2-1+1=b/2次的乘法,若b为奇数,则要做b/2+1次乘法,于是乘法的次数就大大减少,

这样重复分几次后,原式的值就能很快地算出来。

用递归的代码:

1 int QuickPow(int a,int b)
2 {
3      if (b==1) return a;
4      if (b&1) return QuickPow(a,b-1)*a;   //b为奇数
5      return QuickPow(a,b/2);
6 }

非递归:

 1 int QucikPow(int a,int b)
 2 {
 3     int ans=1;
 4     while (b)
 5     {
 6          if (b&1) ans=ans*a;
 7          b=b>>1;
 8          a=a*a;
 9      }
10     return ans;
11 }

注意事项:

     1.用递归的方法会好理解点,但如果b很大的话递归会爆栈。

    2. 函数返回值可能会溢出,如题目要求可利用模运算规则:(a*b)%m=(a%m*b%m)%m

    3. 就算取模了,算法中有乘法操作的地方也还可能会溢出,这就要用快速幂的变式:

           快速加法: a*b=a*(b/2)+a*(b/2)

                          (a+b)%m=(a%m+b%m)%m

           这样就不会溢出了。(还是在tyvj p2043 发现的,下面附上AC代码)

 1 #include <stdio.h>
 2 unsigned long long p,m,n;
 3 unsigned long long ans=1;
 4 inline unsigned long long quickadd(unsigned long long a,unsigned long long m)
 5 {
 6    unsigned long long ans=0;
 7    while (a)
 8    {
 9        if (a&1) ans=(ans+m)%p;
10        a=a>>1;
11        m=(m*2)%p;
12    }
13    return ans;
14 }
15 void quick(unsigned long long n)
16 {
17   while (n)
18   {
19       if (n&1) ans=(quickadd(ans,m))%p;
20       n=n>>1;
21       m=(quickadd(m,m))%p;
22   }
23 }
24 
25 int main()
26 {
27   scanf("%I64d%I64d%I64d",&n,&m,&p);
28   ans=m%p;
29   m=m-1;
30   m=m%p;
31   quick(n-1);
32   printf("%I64d\n",ans);
33 }

 

标签: 关于快速幂
最后更新:2023年3月19日

风君子

独自遨游何稽首 揭天掀地慰生平

点赞
< 上一篇
下一篇 >

猜你喜欢

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复

风君子

独自遨游何稽首 揭天掀地慰生平

最新 热点 随机
最新 热点 随机
python语言的6个特点是什么 电脑360浏览器如何保存网页账号密码 swiper实现轮播效果 switch开机地区选哪个(任天堂switch中文网) MySQL数据库回表与索引怎么理解 刺激战场服饰币怎么充值 绝地求生杀队友有惩罚吗 我的世界幻影鳐怎么打 Ubuntu 18.04配置静态IP地址 迷你世界附魔怎么弄到5
服务器中UDIMM、LRDIMM、RDIMM三种内存的区别是什么pesos是什么国家的币POI 实现 word转成pdf3dmax如何导入家具Steam 喜加一:《小缇娜强袭龙堡:奇幻之地大冒险》免费领取js 里面的 function 与 Function水晶球档杆绝无仅有!韩系豪华电动车捷尼赛思GV60上市:28.58万起PS5 销售火爆,索尼成 AMD 去年最大客户iphonexsmax怎么读语音理想汽车财报:2022全年营收452.9亿元 同比增67.7%
股票蓝色线代表什么 Win11推送KB5016138更新:ARM设备登陆系统终于修好了 android应用申请加入电池优化白名单 看图猜成语 260关 地字上面一个锥子 答案是什么 微信最强对手!三大运营商开始规模化部署5G消息 唯品花征信上有记录吗 还清贷款后多久能解押 李楠成立Angry Miao品牌!8·26发布具未来感的产品 《合成大西瓜》被指做局骗财:遭大量网友投诉 BBA靠边站!北汽:中国汽车品牌已具备“弯道超车”的基础和实力
标签聚合
业界 来了 汽车 秘籍 显卡 身份证 荣耀 特斯拉 比亚迪 投资者 华为 电动车 快科技 微软 银行 额度 iphone 信用卡 小米 中国 马斯克 京东 利率 芯片 网友 美国 借款人 股票 智能手机 游戏 旗舰 余额 AMD 贷款 投资理财 信用 处理器 理财知识 利息 银行卡 苹果 腾讯 三星 支付宝 手机 IT资讯 股价 手续费 科技 花呗

COPYRIGHT © 2023 风君雪博客园. ALL RIGHTS RESERVED.

粤ICP备2022155369号