[板子]快速幂&矩阵快速幂
不会的来这看: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:双指针扫描+矩阵快速幂)
这是一个神奇的课题,其实我觉得用一个词来形容这个算法挺合适的:暴力. 是啊,就是循环+暴力.没什么难的... 先来看一道裸题. 那么对于这道题,显然我们的暴力算法就是枚举区间的左右端点,然后通过前缀和 ...
随机推荐
- PHP如何输出合并单元格的表
https://mp.weixin.qq.com/s/ChPIKIv9tqmuqGyfc9Zi7Q 合并单元格的表,很多地方可以见到,比如购物车,订单合并等,今天给大家讲解一下,如何操作,虽然我用的l ...
- Python学习之路12☞模块与包
一 模块 1.1 什么是模块? 一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀. 1.2 为何要使用模块? 如果你退出python解释器然后重新进入,那么你之前 ...
- java中URLEncode和URLDecode
URLEncode和URLDecode用于完成普通字符串和 application/x-www-from-urlencoded MIME字符串之间的相互转化 如果传递的字符串中包含非西欧字符的字符串, ...
- Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第八章:光照
原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第八章:光照 代码工程地址: https://github.com/j ...
- oracle copy
用法: COPY FROM <db> TO <db> <opt> <table> {(<cols>)} USING <sel> ...
- 提供SaaS Launchkit,快速定制,一云多端等能力,一云多端将通过小程序云实现
摘要: SaaS加速器的技术中心能力中,将提供SaaS Launchkit,快速定制,一云多端等能力,加速应用上云迁移.降低应用开发和定制的门槛,提升效率.其中非常关键的一云多端能力将通过小程序云实现 ...
- day15 web前端之css
css的概念以及初体验 概念: CSS(cascading style sheet)也就是层叠样式表:它是一种网页设计的新技术,现在已经被大多数浏览器所支持,层位网页设计必不可少的工具之一.优点: ...
- 读取Excel文件的两种方法比较 以及用NPOI写入Excel
1. 采用NPOI方式,只需引用NPOI.dll,但目前最高只能到2.4.0版. 缺点:只支持.xls,不支持.xlsx格式.github上的2.4.1版支持.xlsx,但总提示缺ICSharpCod ...
- CSS文本超过两行用省略号代替
1.只显示一行,超出部分用省略号 white-space: nowrap; overflow: hidden; text-overflow: ellipsis; 2.只显示两行(或多行),超出部分用省 ...
- 12-3 DOM操作
一 DOM基础 1 DOM介绍 DOM:文档对象模型.DOM 为文档提供了结构化表示,并定义了如何通过脚本来访问文档结构.目的其实就是为了能让js操作html元素而制定的一个规范. DOM就是由节点组 ...