须知:

编程题中有时会出现大数的乘方取模,此时我们不能使用简单的pow函数。
例如(a^b)%m,若a^b的结果超出计算机数据的存储范围,再去取模,结果显然不对,我们为了防止溢出,可以先分别对a取模,b取模,再求和,输出的结果相同。
a mod b表示a除以b的余数。有下面的公式: 
(a + b) % m = (a%m+ b%m) %m
(a - b) % m = ( (a%m- b%m) + m) %m
(a * b) % m = (a%m)*(b%m) %m                                                                                                                                              (a ^ b)% m = ((a%m)^b)%m

常见的方法有:二分思想、快速幂取模。

最简单的做法:

long long Pow(long long a,long long b){long long ans = 1;for(int i = 0;i < b;i++){ans *= a;}return ans;
}

可以看到,算法的时间复杂度是O(n)。为了降低时间复杂度,我们希望使用一些方法来降低时间复杂度。

1、二分思想:

(a ^ b)% m =   %m                    b为偶数

 %m *a %m        b为奇数

根据上面的公式就可以把时间复杂度从o(n)变为o(logn),具体的程序实现过程如下:

long long  binarypow(long long  a,long long  b,long long  m){if(b==1) return a%m;else if(b%2==0){long long  k=fun(a,b/2,m);return (k*k)%m;}else{long long  k=fun(a,b/2,m);return (((k*k)%m)*(a%m))%m;}
}

2、快速幂取模:

根据引理:积的取余等于取余的积的取余。即(a * b) % m = (a%m)*(b%m) %m

long long quickpow(long long a,long long b ,long long m){long long k=1;while(b>0){if(b&1){k=(k*a)%m;}b=b>>1;a=(a*a)%m;}return k;
}

【算法编程】乘方取模相关推荐

  1. 乘方取模计算(模幂计算)

    乘方取模计算也称为模幂计算,在密码系统中经常使用,是不可缺少的. 使用本程序可以解HDU2035,只需要考虑输入和输出. /** 乘方取模** 已知给定的正整数a.n和m,计算x的值,a^n = x ...

  2. 高精度算法(加减乘除取模(均可以处理负数))

    高精度算法 前言 大数加法 不可以处理负数的模板 可以处理负数 大数减法 两个数都是整数,且相减结果大于0 两个数都是正整数,相减结果可以是负数 两个数均可以是负数 高精度乘法 两个数均可以是负数 大 ...

  3. OLED取模软件的编码算法(自己取模时候注意)

    数据结构 使用16进制数的一维数列来传递信息.其中的每个4位的数控制4个pixe的亮灭.两个拼在一起控制8个像素. 但是其扫描的排列却是竖着的.具体来说,第一列表示为0XFF,灯全亮.第二列表示为0X ...

  4. python快速幂算法解决大数取模

    1.前置性质 模运算的性质 [(a mod n)×(b mod n)] mod n = (a×b) mod n 指数可以拆分成二进制的形式,如9拆分成 1001 根据二进制的计算,1001 = ((1 ...

  5. POJ 3761 Bubble Sort(乘方取模)

    点我看题目 题意 : 冒泡排序的原理众所周知,需要扫描很多遍.而现在是求1到n的各种排列中,需要扫描k遍就变为有序的数列的个数,结果模20100713,当然了,只要数列有序就扫描结束,不需要像真正的冒 ...

  6. java hash 取模_HashMap 中的取模和扩容公式推导

    为什么 HashMap 容量 capacity 大小是 2 的 n 次幂? 为什么使用 e.hash & (capacity - 1) 位运算作取模公式? 为什么扩容时使用 e.hash &a ...

  7. 斐波那契数列取模(大数)分治算法

    斐波那契数列取模(大数)分治算法 这是算法课程上完分之策略后老师留的一道题目: 菲波那契数列如下:1,1,2,3,5,8,13,21,34......其中a[1] = 1, a[2] = 1, a[n ...

  8. C语言快速幂取模算法小结

    资料链接:http://www.jb51.net/article/54947.htm C语言实现的快速幂取模算法,是比较常见的算法.分享给大家供大家参考之用.具体如下: 首先,所谓的快速幂,实际上是快 ...

  9. 【转】数学与编程——求余、取模运算及其性质

    一.求余运算(Remainder) (参考维基百科: http://zh.wikipedia.org/wiki/余数  http://en.wikipedia.org/wiki/Remainder h ...

最新文章

  1. appium+python自动化45-夜神模拟器连不上(adb server version (36) doesn't match this client (39); killing...)...
  2. tensorflow1.0代码迁移到2.0官方指导
  3. Linux内核分析--内核中的数据结构双向链表续【转】
  4. MP4文件格式的解析,以及MP4文件的分割算法
  5. Storm 疑难杂症。
  6. static 与 extern 关键字描述说明
  7. 3006基于二叉链表的二叉树最长路径的求解(附思路)
  8. php的数组排列函数,PHP实现的自定义数组排序函数与排序类示例
  9. java draw 方法调用_java,_Java,在构造器里调用多态方法,java - phpStudy
  10. 阿里图标库的基本使用
  11. 单片机常用之晶振电路工作原理简述
  12. oracle12c不使用cdb模式,12c CDB和PDB启动和关闭操作
  13. 【电力电子】【2014.08】电力电子系统公用接口的三相功率因数校正设计
  14. configure: error: --with-openssl was given but OpenSSL could not be detected 解决方法(Curl交叉编译到Arm板)
  15. 【Win10电脑更新】Win10电脑更新后小娜Cortana不能登录、咨询和兴趣不能查看的问题怎么解决
  16. linux提示Another app is currently holding the xtables lock. Perhaps you want to use the -w option?
  17. 【弹子兵法】四国军棋棋盘、棋子与记谱【基础篇】
  18. 企业网络如何实现升级
  19. python错误找回_python字典键错误无法恢复
  20. 打印机无法打印,配置端口显示错误?

热门文章

  1. 淘宝API接口系列,获取购买到的商品订单列表,订单详情,订单物流,收货地址列表,买家信息,买家token,卖出的商品订单列表
  2. 2018春招总结(Java后端),干货满满
  3. 2022-2027年中国平台经济行业市场全景评估及发展战略规划报告
  4. html5给文字添加拼音,h5 给汉字加拼音 加进度条
  5. 苹果手机怎么在照片上添加文字_手机美图秀秀怎么给图片添加文字
  6. 数据结构笔记(王道考研) 第五章:树和二叉树
  7. Data Vault初探(十) —— 星型模型向Data Vault模型转化
  8. 普通最小二乘法讲解OLS线性回归
  9. 被割裂的数据思维(古代战争中的应用)
  10. 音程示范歌曲,lilypond example