[板子]快速幂&矩阵快速幂
不会的来这看:https://www.cnblogs.com/CXCXCXC/p/4641812.html
简单的一说:当转换为二进制的时候有位运算这种黑科技,&相当于%2判断奇偶性。
x&1==0为偶,x&1==1为奇
&运算通常用于二进制取位操作,例如一个数 & 1 的结果就是取二进制的最末位。还可以判断奇偶x&1==0为偶,x&1==1为奇
只有在奇数情况的时候把base乘进去,每一次用base*base扩大平方,b的二进制去除一位。
int poww(int a,int b){
int ans=,base=a;
while(b!=){
if(b&==)
ans*=base;
base*=base;
b>>=;
}
return ans;
}
接下来是矩阵快速幂。
摘自:blog.csdn.net/wust_zzwh/article/details/52058209

其中c[i][j]为A的第i行与B的第j列对应乘积的和,即:
#include<bits/stdc++.h> #define LL long long
using namespace std; LL n,k; const long long pi=1e9+; struct ska{
LL a[+][+];
}p,pp; ska X(ska x,ska y){
ska box; for(LL i=;i<=n;i++){
for(LL j=;j<=n;j++){
box.a[i][j]=;
}
} for(LL i=;i<=n;i++){ for(LL j=;j<=n;j++){ for(LL k=;k<=n;k++){ box.a[i][j]=(box.a[i][j]+(x.a[i][k]*y.a[k][j])%pi)%pi; }
}
} return box;
} ska quick_pow(LL kk){ ska ans; for(LL i=;i<=n;i++){
ans.a[i][i]=;
} while(kk!=){ if(kk&==){ ans=X(ans,p);
} kk>>=; p=X(p,p); } return ans;
} int main(){
scanf("%lld%lld",&n,&k); for(LL i=;i<=n;i++){ for(LL j=;j<=n;j++){ scanf("%lld",&p.a[i][j]); }
} pp=quick_pow(k); for(LL i=;i<=n;i++){ for(LL j=;j<=n;j++){ printf("%lld ",pp.a[i][j]); } cout<<endl;
}
return ;
}
[板子]快速幂&矩阵快速幂的更多相关文章
- 矩阵乘法&矩阵快速幂&矩阵快速幂解决线性递推式
矩阵乘法,顾名思义矩阵与矩阵相乘, 两矩阵可相乘的前提:第一个矩阵的行与第二个矩阵的列相等 相乘原则: a b * A B = a*A+b*C a*c+b*D c d ...
- 快速幂 & 矩阵快速幂
目录 快速幂 实数快速幂 矩阵快速幂 快速幂 实数快速幂 普通求幂的方法为 O(n) .在一些要求比较严格的题目上很有可能会超时.所以下面来介绍一下快速幂. 快速幂的思想其实是将数分解,即a^b可以分 ...
- jiulianhuan 快速幂--矩阵快速幂
题目信息: 1471: Jiulianhuan 时间限制: 1 Sec 内存限制: 128 MB 提交: 95 解决: 22 题目描述 For each data set in the input ...
- 【数论】 快速幂&&矩阵快速幂
首先复习快速幂 #include<bits/stdc++.h> using namespace std; long long power(long long a,long long b,l ...
- 整数快速乘法/快速幂+矩阵快速幂+Strassen算法
快速幂算法可以说是ACM一类竞赛中必不可少,并且也是非常基础的一类算法,鉴于我一直学的比较零散,所以今天用这个帖子总结一下 快速乘法通常有两类应用:一.整数的运算,计算(a*b) mod c 二.矩 ...
- 快速幂&&矩阵快速幂
快速幂 题目链接:https://www.luogu.org/problemnew/show/P1226 快速幂用了二分的思想,即将\(a^{b}\)的指数b不断分解成二进制的形式,然后相乘累加起来, ...
- hdu 4549 M斐波那契数列(快速幂 矩阵快速幂 费马小定理)
题目链接http://acm.hdu.edu.cn/showproblem.php?pid=4549: 题目是中文的很容易理解吧.可一开始我把题目看错了,这毛病哈哈. 一开始我看错题时,就用了一个快速 ...
- 矩阵快速幂模板(pascal)
洛谷P3390 题目背景 矩阵快速幂 题目描述 给定n*n的矩阵A,求A^k 输入输出格式 输入格式: 第一行,n,k 第2至n+1行,每行n个数,第i+1行第j个数表示矩阵第i行第j列的元素 输出格 ...
- 培训补坑(day10:双指针扫描+矩阵快速幂)
这是一个神奇的课题,其实我觉得用一个词来形容这个算法挺合适的:暴力. 是啊,就是循环+暴力.没什么难的... 先来看一道裸题. 那么对于这道题,显然我们的暴力算法就是枚举区间的左右端点,然后通过前缀和 ...
随机推荐
- Python中的动态继承
所谓动态继承,是指代码运行时再决定某个类的父类.某些场景下会用到,比如threading.Thread和multiprocessing.Process这两个类有很多同名的接口,可以实现某个子类动态继承 ...
- Ubuntu里node命令无效解决方法
在ubuntu里用sudo apt-get install nodejs安装Node.js后, 会发现terminals里运行node命令(比如node –-version)时候会有No such f ...
- 微信开发之web开发者工具
web开发者工具. 有任何疑问或建议请私信我,或者在评论区大家一起探讨. 概述 为帮助开发者更方便.更安全地开发和调试基于微信的网页,我们推出了 web 开发者工具.它是一个桌面应用,通过模拟微信客户 ...
- oracle中常用的时间格式转换
1:取得当前日期是本月的第几周 select to_char(sysdate,'YYYYMMDD W HH24:MI:SS') from dual; TO_CHAR(SYSDATE,'YY') se ...
- python 文本文件的写入
- nodejs启本地服务器
https.js var PORT = 8666;// var http = require('http'); var url=require('url'); var fs=require('fs') ...
- 前端基础☞html
HTML 初识 web服务本质 import socket def main(): sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s ...
- Alternating Direction Method of Multipliers -- ADMM
前言: Alternating Direction Method of Multipliers(ADMM)算法并不是一个很新的算法,他只是整合许多不少经典优化思路,然后结合现代统计学习所遇到的问题,提 ...
- mysql数据库之去重
利用 distinct :对需要处理的字段进行去重 select distinct 字段名 from 表名 去重以后 利用group by select * from 表名 group by 字段名 ...
- 洛谷P1049 装箱问题
//01背包 价值等于体积 求所剩最小体积 #include<bits/stdc++.h> using namespace std; ; ; int c,n,v[maxn],f[maxv] ...