博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
快速幂学习入门
阅读量:4964 次
发布时间:2019-06-12

本文共 1177 字,大约阅读时间需要 3 分钟。

快速幂学习心得:

1、快速幂大致分为普通的快速幂,快速乘法,矩阵快速幂(point);
2、快速幂主要应用的是二进制,详细的见模板。
3、快速乘法,其实乘法就是多个数相加,当数据很大的时候加起来会非常的慢,这里可以用到快速幂的思想。详细见模板
4、主要的还是矩阵快速幂,矩阵快速幂可以将矩阵看作一个常数,思想不变,可以operater *,主要参考一下线性代数上的矩阵的乘法运算。

普通快速幂:

mod 1e9+7;

// a*b;const long long MOD = 1e9+7;long long q_pow(long long a,long long b){    long long sum=1;    while(b)    {        if(b&1)//当b是奇数时            sum = (sum * a)%MOD;        a = (a * a)%MOD;        b>>=1;    }    return  sum;}

乘法快速幂

mod1e9+7;

//原理和上述的相同typedef long long ll;const long long MOD = 1e9+7;ll q_c(ll a,ll b){    ll sum=0;    while(b)    {        if(b&1)            sum = (sum + a)%MOD;        a = (a + a)%MOD;        b>>=1;    }}

矩阵快速幂

//参考的bilibili上面一个大佬讲解快速幂的视频#include
const int maxn = 150;const int MOD = 1e9+7;typedef long long ll;int n;int num;struct mat//使用结构体,返回时可以直接返回mat{ int m[maxn][maxn];} unit;//单位矩阵(主对角线上全是一,其他的全是0的矩阵)mat operator * (mat a,mat b)//对于惩罚重新定义{ ll x; mat c; for(int i=0; i
>=1; } return unit ;}int main(){ mat aim; while(scanf("%d",&n)!=EOF)//必须要是n阶方正才可以 { scanf("%d",&num);//num个矩阵相乘 for(int i=0; i

转载于:https://www.cnblogs.com/GoldenFingers/p/9107380.html

你可能感兴趣的文章
HttpClientHelper
查看>>
索引模块
查看>>
Android输入控件EditText和软键盘监听
查看>>
android studio启动react-native项目
查看>>
C++ 的输入输出
查看>>
【洛谷3796】【模板】AC自动机(加强版)
查看>>
【洛谷5284】[十二省联考2019] 字符串问题(后缀数组+主席树优化建图)
查看>>
213. House Robber II
查看>>
SQL server 2012 阻塞分析查询
查看>>
Zookeeper异常ConnectionLossException解决
查看>>
lvm快照不停机备份mysql
查看>>
python基础四-列表与元祖
查看>>
C#语法基础之第二节
查看>>
Maven 梳理 -聚合与继承
查看>>
GC roots
查看>>
DevExpress之XtraReport 学习
查看>>
php 获取mac地址
查看>>
斐波那契数列(升级版)
查看>>
题目1434:今年暑假不AC (项目安排类:结束时间快排,判断开始时间)
查看>>
关于new
查看>>