c++ 快速幂 代码实现
懒得打代码系列…
不过这个代码挺短的死背下来也ok
解析在最下面
建议自己手动试个数据理解一下 比如 3^5
^^
原理:a ^ b = a ^ (b / 2) * 2
(b是奇数的话还要再乘一个a)
还有就是我发现自己英语词汇还是太少了QAQ
只能乖乖打拼音…
装不了逼了真的超生气
低端版本
这个都看得懂 就懒得注释了嘻嘻:)
int quick_mi( int DiShu , int ZhiShu , int Mo ){
if(ZhiShu == 1) return DiShu ;
int ans ;
ans = quick_mi(DiShu , ZhiShu / 2 , Mo) % Mo;
ans = ans * ans % Mo ;
if(ZhiShu >>= 1){
ans = ans * DiShu % Mo ;
}
return ans ;
}
高级版本
(反正那些一眼看上去看不懂的对我来说都挺高级的^^
int quick_mi( int DiShu , int ZhiShu , int Mo ){
int ans = 1 ;
while( ZhiShu ){
if( ZhiShu & 1 ) //如果当前指数为奇数
ans = ans * DiShu % Mo ;//上下两行代码的顺序要理解一下
DiShu *= DiShu ;
ZhiShu >>= 1 ; //指数除以二
}
return ans ;
}
[其实就是指数不断除二 底数再不断乘二啦 还要不断 % Mo防止爆掉数据范围]
[不过要特别处理指数为奇数的时候 这里没有写出来]
ans = DiShu ^ ZhiShu % Mo ;
ans = { DiShu ^ ( ZhiShu / 2 ) * DiShu ^ ( ZhiShu / 2 ) } % Mo ;
ans = DiShu ^ ( ZhiShu / 2 ) ^ 2 % Mo ;
[当指数为奇数的时候 当前步还要再多乘一次底数]
ans = ( DiShu * DiShu ) ^ ( ZhiShu / 2 ) % Mo ;
ans = ( DiShu * DiShu ) ^ ( ZhiShu / 2 / 2 ) ^ 2 % Mo ;
ans = { ( DiShu * DiShu ) ^ ( DiShu * DiShu ) } ^ ( ZhiShu / 2 / 2 ) % Mo ;
[同理]
…..
[直到当前指数由 1 / 2 变成0的时候最后的答案就算出来啦]
[不要忘记奇数的处理!]
矩阵快速幂的原理也是一样的
只不过把*变成了矩阵意义上的乘而已
^^
c++ 快速幂 代码实现的更多相关文章
- HDU2035 人见人爱A^B(快速幂)
描述: 求A^B的最后三位数表示的整数.说明:A^B的含义是“A的B次方”. 输入: 输入数据包含多个测试实例,每个实例占一行,由两个正整数A和B组成(1<=A,B<=10000),如果A ...
- 洛谷试炼场-简单数学问题-P1045 麦森数-高精度快速幂
洛谷试炼场-简单数学问题 B--P1045 麦森数 Description 形如2^P−1的素数称为麦森数,这时P一定也是个素数.但反过来不一定,即如果PP是个素数,2^P-1 不一定也是素数.到19 ...
- 矩阵二分快速幂优化dp动态规划
矩阵快速幂代码: int n; // 所有矩阵都是 n * n 的矩阵 struct matrix { int a[100][100]; }; matrix matrix_mul(matrix A, ...
- poj3070矩阵快速幂求斐波那契数列
Fibonacci Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 13172 Accepted: 9368 Desc ...
- 递归实现快速幂(C++版)
快速幂是什么? 顾名思义,快速幂就是快速算底数的n次幂.其时间复杂度为 O(log₂N), 与朴素的O(N)相比效率有了极大的提高. 就以a的b次方来介绍: 把b转换成二进制数,该二进制数第i位的权为 ...
- ACM学习历程—HDU 5451 Best Solver(Fibonacci数列 && 快速幂)(2015沈阳网赛1002题)
Problem Description The so-called best problem solver can easily solve this problem, with his/her ch ...
- quickpow || 快速幂
洛谷例题 推荐自行脑补:百度百科 如果 ,那么 : 前言:快速幂就是快速算底数的n次幂.其时间复杂度为 O(log₂N), 与朴素的O(N)相比效率有了极大的提高. 拿题目样例 Input :2 1 ...
- HLOJ1361 Walking on the Grid II 矩阵快速幂
题目分析: 就当是一次记录吧,2013年绍兴市市赛的一题,重现赛当时我想递推可能是矩阵快速幂吧,但是这个递推公式真没推出来(赛后猛如虎系列),这题和第一题有联系又有区别,第一题的递推很简单,dp[i] ...
- ACM | 算法 | 快速幂
目录 快速幂 快速幂取模 矩阵快速幂 矩阵快速幂取模 HDU1005练习 快速幂 幂运算:\(x ^ n\) 根据其一般定义我们可以简单实现其非负整数情况下的函数 定义法: int Pow ( ...
随机推荐
- [软件工程基础]2017.10.27 第二次 Scrum 会议
决议 周六前项目交接 Milestone 完成 周六集体开发 游心整理物理网站上的实验流程和绪论复习题 石奇川上线静态版实验流程和绪论复习题库 李煦通构思后端如何实现绪论题库,包括和用户记录的关联方式 ...
- JavaScript引擎基本原理:Shapes和Inline Caches
原文链接: JavaScript engine fundamentals:Shapes and line Cahes 这篇文章描述了一些在js引擎中通用的关键点, 并不只是V8, 这个引擎的作者(Be ...
- centos7安装文档
1.当载入安装镜像时,我们会看到如下图中的画面,我们选择第一项,安装centos7 2.选择英语(个人测试环境可以使用中文安装) 3.选择network&hostname配置网络 4.在配置网 ...
- 最长上升子序列 O(nlogn)
题意:求一个序列中的最长上升子序列. 平常我用的是N*N做法,但是一遇到需要nlogn时,就被卡的无地自容了. 所以下定决心要学习nlogn做法. 如何实现nlongn哪? 这里要用到一个栈B,记录按 ...
- office 导出问题
就用程序池右击项目高级设置 应用程序池的项目中的标识改为 LocalSystem 启用32位应用程序设为true或false
- 由于js词法性质和全局变量被更改,循环绑定的click事件执行时变量和定义时 不一致的bug,各种解决方案。
由于js词法性质和全局变量被更改,循环绑定的click事件执行时变量和定义时 不一致的bug,各种解决方案. 动态在页面上添加了5个按钮,实现的功能应该是点击对应按钮在控制台输出相应的索引.但因为应该 ...
- Android 仿微信朋友圈添加图片
github地址(欢迎下载Demo) https://github.com/zhouxu88/WXCircleAddPic 老习惯,先上图,着急用的朋友,直接带走Demo,先拿来用吧,毕竟老板催的紧, ...
- Sublime Text 3 使用小记
快捷键: [ // 代码对齐插件 { "keys": ["shift+alt+a"], "command": "alignment ...
- 求矩阵的n次方 c语言实现
矩阵的n次方,比较容易理解的想法是递归. 思路是这样的,把n分成两部分,当n是偶数的时候,即为左右两边的乘积,如果n是奇数,即为左右两边的乘积再乘a ) matrixn())^*a else matr ...
- python打飞机pro版
# -*- coding: utf-8 -*- import pygame from sys import exit import random pygame.init() screen = pyga ...