// return (a * b) % m
LL mod_mult(LL a, LL b, LL m)
{LL res = 0;LL exp = a % m;while (b){if (b & 1){res += exp;if (res > m) res -= m;}exp <<= 1;if (exp > m) exp -= m;b >>= 1;}return res;
}

求余防止溢出

这个求余乘法的思想是,先将一个数用2进制表示:

bn表示b的二进制的第n个bit,当然,首个比特是从0开始算的。将a乘入括号中,得到:

由于bn要么是0要么是1,所以只需计算为1的部分就可以了,比如3*5:

每加一次就求一次余,这样每次加上去的都是小于m的余数,这样就不怕溢出了。由于每个bit都需要计算一次,所以复杂度是O(log(N))。

求余小技巧 码农场 » POJ 3641 Pseudoprime numbers 题解 《挑战程序设计竞赛》相关推荐

  1. 码农场 » POJ 2566 Bound Found 题解 《挑战程序设计竞赛》

    本题用的是取尺法,是难得的好题,不过题目数据似乎有些问题,取尺法的复杂度为O(k*n),很明显应该TLE,但是却过了. 而且,本题是想加排序之后才采用的取尺法. #include <iostre ...

  2. POJ 3669-Meteor Shower [bfs] 《挑战程序设计竞赛》2.1

    题目链接: POJ 3669 Meteor Shower 题目大意: 你在坐标原点, 只能在第一象限沿着x,y轴方向移动, 单位时间内一次移动一格.马上将要迎来一场流星雨, 也只会落到第一象限, 每颗 ...

  3. POJ 3713 Transferring Sylla​ 题解 《挑战程序设计竞赛》

    为什么80%的码农都做不了架构师?>>>    POJ 3713 Transferring Sylla三连通图:判断一个无向图是否三连通?3.5借助水流解决问题的网络流最大流刷个题报 ...

  4. POJ 1418 Viva Confetti 题解 《挑战程序设计竞赛》

    为什么80%的码农都做不了架构师?>>>    POJ 1418 Viva Confetti礼花:Confetti 是一些大小不一的彩色圆形纸片,人们在派对上.过节时便抛洒它们以示庆 ...

  5. POJ 1150 The Last Non-zero Digit 《挑战程序设计竞赛》

    为什么80%的码农都做不了架构师?>>>    POJ 1150 The Last Non-zero Digit超大组合数:求超大组合数P(n, m)的最后一个非零位.4.1更加复杂 ...

  6. POJ 3735 Training little cats​ 题解 《挑战程序设计竞赛》

    为什么80%的码农都做不了架构师?>>>    POJ 3735 Training little cats调教猫咪:有n只饥渴的猫咪,现有一组羞耻Play,由k个操作组成,全部选自: ...

  7. POJ 3608 Bridge Across Islands 《挑战程序设计竞赛》

    为什么80%的码农都做不了架构师?>>>    POJ 3608 Bridge Across Islands跨岛大桥:在两个凸包小岛之间造桥,求最小距离?3.6与平面和空间打交道的计 ...

  8. 《挑战程序设计竞赛》--初级篇习题POJ部分【动态规划】

    关于基本的动态规划和经典的动态规划,在之前已经总结过了,可以温习一下: 传送门 这次是延续上次的<挑战程序设计竞赛>初级篇,总结部分poj上的练习题,主要是DP方面的练习题: 一.基础的动 ...

  9. 《挑战程序设计竞赛》--初级篇习题POJ部分【2.4 - 2.6】

    这次是延续上次的<挑战程序设计竞赛>初级篇,总结部分poj上的练习题,主要是2.4 ~ 2.6部分: 导航 2.4 加工并存储的数据结构 优先队列 Sunscreen MooUnivers ...

最新文章

  1. 钉钉被小学生逼疯,拍片在线求饶哈哈哈哈
  2. 骄阳似火 细数史上数据中心火灾 如何才能重蹈覆辙?
  3. Oracle 无备份情况下的恢复--控制文件/数据文件
  4. c++ primer 19th 特殊工具与技术
  5. 使用ASP.NET MVC、Rabbit WeixinSDK和Azure快速开发部署微信后台
  6. Arch Linux配置gnome桌面
  7. 斐讯盒子T1_【YYF固件】夏杰语音实用版刷机固件及教程分享
  8. PowerBuilder GRID美化
  9. 百度SEO站群超简约实惠的个人简历模板源码
  10. 使用moviepy为视频添加字幕
  11. 【业界新闻】浪潮高端存储系统技术发展及展望(下篇)
  12. linux 搜狗输入法快捷键设置,Linux配置中文输入法(搜狗输入法)-Go语言中文社区...
  13. 如何使用 ELEMENTOR
  14. 下方点击出项上方对应的插件_sketch必备插件Craft功能详解(下)
  15. 04-项目立项:项目方案、可行性分析、产品规划、立项评审
  16. 一文搞懂Spring,堪称Spring源码终结者
  17. java 给pdf解密_PDF文件如何解密?分享一个简单的PDF解密方法
  18. python中可选参数如何指定_Python可选参数
  19. 借助github搭建自己的CDN服务
  20. 测试用例设计-等价类划分法

热门文章

  1. js复制、粘贴完整实例代码
  2. Verilog:【4】脉冲发生器(pulse_gen.sv)
  3. html在浏览器显示图片,html - 在所有Web浏览器中显示TIFF图像
  4. win10找不到gpedit.msc
  5. C语言数据结构一元多项式
  6. 反向传播 - 李宏毅机器学习笔记
  7. 电脑一键装机下载重装系统详细教程
  8. 浅述容器和容器镜像的区别
  9. 李嘉诚布局接班人富儿穷养 财富版图正远离中华区
  10. 四种人适合一起创业,三种人绝对不能合伙