• 第一课 快速幂取模


    站在acm的角度上看,《算法概论》这本书上感觉废话好多。

    始终觉得学算法的最佳途径就是做题,而不是单纯的看书看伪算法。实现才是王道。

    快速幂取模,其实也是以前写过的二分求幂,或离散课上的同余幂。

    以前写的代码版本太乱,现在总结一下,以便以后碰到这类问题能直接对症下药。

    求b^e mod m,b,e,m都是比较大的整数。

    递归算法:

     1 //快速幂取模 
     2 int modexp(int b, int e, int m)    //b是底数,e是指数,m是模 
     3 {
     4     if (e == 0)
     5         return 1;
     6     
     7     int temp = modexp(b, e/2, m);
     8     
     9     if (e%2)  //若e是奇数,那么除以2后会少乘一个b. 
    10         return b*temp*temp%m;
    11     else
    12         return temp*temp%m;
    13 }

    非递归算法:

     1 int modexp(int b, int e, int m) 
     2  {
     3      int ans = 1; 
     4      
     5      while (e)
     6      {
     7          if (e%2)  //若e是奇数,那么除以2后会少乘一个b.
     8              ans = ans*b%m;
     9          
    10          b = b*b%m;
    11          
    12          e /= 2;
    13      }
    14      
    15      return ans;
    16  }
  • 相关阅读:
    16.什么是面向对象编程?
    15.运动
    14.this指向和ES6常用内容
    13.正则表达式
    12.事件模型
    11.event事件对象
    10.BOM
    9.DOM
    拓扑排序学习(复习)笔记
    [Luogu] P1987 摇钱树
  • 原文地址:https://www.cnblogs.com/chenyg32/p/2977457.html
Copyright © 2020-2023  润新知