快速幂,矩阵乘法,矩阵快速幂

快速幂利用二进制

复杂度 log级

#include <cstdio>
#include <iostream>
#include <string>
#include <bits/stdc++.h>using namespace std;
typedef long long ll;
typedef unsigned long long ull;int q_power(int a,int b,int c) {int r=1;a%=c;while (b) {if (b&1) {r=(r*a)%c;}a=(a*a)%c;b>>=1;}return r;
}int a,b,c;
int main () {cin>>a>>b>>c;cout<<q_power(a,b,c);return 0;
}

附带上矩阵快速幂以及

矩阵快速幂求斐波那契数列:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
const int mod = 10000;
const int maxn = 35;
int N;
struct Matrix {int mat[maxn][maxn];int x, y;Matrix() {memset(mat, 0, sizeof(mat));for (int i = 1; i <= maxn - 5; i++) mat[i][i] = 1;}
};
inline void mat_mul(Matrix a, Matrix b, Matrix &c) {memset(c.mat, 0, sizeof(c.mat));c.x = a.x; c.y = b.y;for (int i = 1; i <= c.x; i++) {for (int j = 1; j <= c.y; j++) {for (int k = 1; k <= a.y; k++) {c.mat[i][j] += (a.mat[i][k] * b.mat[k][j]) % mod;c.mat[i][j] %= mod;}}}return ;
}
inline void mat_pow(Matrix &a, int z) {Matrix ans, base = a;ans.x = a.x; ans.y = a.y;while (z) {if (z & 1 == 1) mat_mul(ans, base, ans);mat_mul(base, base, base);z >>= 1;}a = ans;
}
int main() {while (cin >> N) {switch (N) {case -1: return 0;case 0: cout << "0" << endl; continue;case 1: cout << "1" << endl; continue;case 2: cout << "1" << endl; continue;}Matrix A, B;A.x = 2; A.y = 2;A.mat[1][1] = 1; A.mat[1][2] = 1;A.mat[2][1] = 1; A.mat[2][2] = 0;B.x = 2; B.y = 1;B.mat[1][1] = 1; B.mat[2][1] = 1;mat_pow(A, N - 1);mat_mul(A, B, B);cout << B.mat[1][1] << endl;}return 0;
}

顺便来一发

矩阵乘法:

/*假设 A 是 m*p 的矩阵 , B 是 p*n 的矩阵记 C = AB (C 是 矩阵 A与B的乘积)那么 C 是 m*n 的矩阵 
*/
for (int i = 1;i <= m;++i)//A的行 
{for (int j = 1;j <= n;++j)//B的列 
    {for (int k = 1;k <= p;++k)//通过公式求C 
        {C[i][j] += A[i][k]*B[k][j];}}
}
#include<iostream>
#include<cmath>
#include<cstring>
using namespace std;
typedef long long LL;
const LL mod = 1000000007;
/*矩阵快速幂求斐波那契数列输入 n 输出 f[n] 
*/ 
struct Mat
{LL mat[2][2];
};
Mat operator * (Mat a,Mat b)//矩阵乘法
{Mat c;for (int i = 0;i < 2;++i){for (int j = 0;j < 2;++j){c.mat[i][j] = 0;for (int k = 0;k < 2;++k){c.mat[i][j] = ((a.mat[i][k]*b.mat[k][j])%mod + c.mat[i][j])%mod;}}}return c;
}
Mat operator ^ (Mat a,LL k)//矩阵幂
{Mat c;for (int i = 0;i < 2;++i){for (int j = 0;j < 2;++j){c.mat[i][j] = (i==j);//初始化为单位矩阵
        }}//据说任何矩阵乘以单位矩阵其值不会变for (;k;k>>=1){if (k&1) c = c*a;a = a*a;}return c;
}
int main()
{LL n;while (cin>>n){Mat a;a.mat[0][0] = 1,a.mat[0][1] = 1,a.mat[1][0] = 1,a.mat[1][1] = 0;Mat fn = a^n;cout<<fn.mat[0][1]<<endl;}return 0;
}

 

转载于:https://www.cnblogs.com/codemaker-li/p/9899049.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/253157.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

标准C++类std::string的内存共享和Copy-On-Write(写时拷贝)

标准C&#xff0b;&#xff0b;类std::string的内存共享&#xff0c;值得体会&#xff1a; 详见大牛&#xff1a;https://www.douban.com/group/topic/19621165/ 顾名思义&#xff0c;内存共享&#xff0c;就是两个乃至更多的对象&#xff0c;共同使用一块内存&#xff1b; 1.关…

常用类一一枚举类一一定义和调用

package test;public class EnumTest {/**枚举* */public static void main(String[] args) {// TODO Auto-generated method stubStudent stu new Student();stu.setName("李华");stu.setSex(Genders.MALE);stu.setAge(24);System.out.println(stu.getSex());}} pa…

HDbaseT 高清传输更简单——只需一根网线

HDbaseT支持最高20Gbps的传输速率&#xff0c;能更好的支持未来的3D和2K4K视频格式&#xff0c;传输采用普通的CAT5e/6网络线缆&#xff0c;连接器也采用普通的 RJ45接头&#xff0c;而传输距离达到了100米&#xff0c;除了提供视频信号传输功能外&#xff0c;还具有网络连接以…

2017年

2017年对自己来说这一年是最需要成长的一年&#xff0c;肩上的责任越来越大了。转载于:https://www.cnblogs.com/jimmy1293/p/6543533.html

解决 | 此数据库文件跟当前sql server实例不兼容 sql server2008无法连接到(local)...

最近在搞ASP.NET&#xff0c;因实验室VS版本跟PC不一样可能&#xff0c;拷回来一打开就这样子&#xff1a; 眉头一皱的我打开我的古董SQL&#xff0c;自从用了MySQL就没碰它了我的锅。。。果然。。连接的时候。。。不慌&#xff0c;(win 10)打开控制面板\系统和安全\管理工具 -…

IP大时代下,网络枪机技术发展现状

来源&#xff1a;a&s《评测&选型》 作者&#xff1a;海康威视程玮 在视频监控行业内&#xff0c;有很多里程碑式的产品&#xff0c;我们可以从这些产品中了解视频监控的发展趋势。2000年左右&#xff0c;第一台DVR面世奠定了视频监控行业从CCTV走向数字化的基础&#x…

JVM调优总结(3):垃圾回收面临的问题

如何区分垃圾 上面说到的“引用计数”法&#xff0c;通过统计控制生成对象和删除对象时的引用数来判断。垃圾回收程序收集计数为0的对象即可。但是这种方法无法解决循环引用。所以&#xff0c;后来实现的垃圾判断算法中&#xff0c;都是从程序运行的根节点出发&#xff0c;遍历…

RoHS、无铅制程、无卤 的基本介绍

一、RoHS是欧盟对电子电器产品不能超标含有某些有害物质的禁令&#xff1b;在具体产品生产中&#xff0c;从原材料的选择、采购到制程中可能会污染产品&#xff08;和产品接触&#xff09;的生产辅助材料&#xff0c;都必须不能超标含有&#xff08;有最大允许浓度&#xff09;…

springCloud分布式事务实战(九)改造ThemeMicroService 支持分布式事务

&#xff08;1&#xff09; 添加jar <!-- springCloud 事务 关键点1 --><dependency><groupId>com.codingapi</groupId><artifactId>transaction-springcloud</artifactId><version>${lcn.last.version}</version><exclu…

日常的一天学习

今天的学习仍然没有特别明确的计划&#xff0c;也许自己不应该再徘徊&#xff0c;专心做java编程挺好的啊&#xff0c;也许还能找到不错的工作&#xff0c;可是自己始终还是想成为一个研究安全的人&#xff0c;只是不知道自己在毕业的时候能不能成长到靠安全来养活自己。 早上主…

庖丁解牛-----Live555源码彻底解密(根据MediaServer讲解Rtsp的建立过程)

live555MediaServer.cpp服务端源码讲解(testRelay.cpp,http://blog.csdn.net/smilestone_322/article/details/18923139) int main(int argc, char** argv) { // Begin by setting up our usage environment: TaskScheduler* scheduler BasicTaskScheduler::createNew(); Usa…

运放搭建主动滤波电路

主动低通滤波电路 R1R216K R3R4100K C1C20.01uF 放大倍数AvR4/(R3R4) Freq1KHz 主动高通滤波电路 C12*C20.02uF,C20.01uF R1R2110K 6dBLow-cutFreq100Hz

deployd使用

安装node,用npm 安装deployd , npm install deployd -g。 cd进入文件夹&#xff0c;输入 dpd create deploydDemo&#xff0c;然后 dpd -p 5500 deploydDemo\app.dpd&#xff08;5500是你开启的mongodb创建的服务&#xff09;&#xff0c;接着在浏览器中输入 http://localhost:…

android自定义布局实现优惠券效果

最近需要实现一个凹凸效果的拟物化优惠券效果&#xff0c;我一看&#xff0c;本来想用.9图片做背景实现的&#xff0c;虽说图片做背景实现省事儿方便&#xff0c;但是能用代码实现最好不过了&#xff0c;最终我还是选择了用代码来实现&#xff0c;于是有了下文。 最终效果图 de…

邮件实现详解(四)------JavaMail 发送(带图片和附件)和接收邮件

好了&#xff0c;进入这个系列教程最主要的步骤了&#xff0c;前面邮件的理论知识我们都了解了&#xff0c;那么这篇博客我们将用代码完成邮件的发送。这在实际项目中应用的非常广泛&#xff0c;比如注册需要发送邮件进行账号激活&#xff0c;再比如OA项目中利用邮件进行任务提…

运放搭建电压电流转换电路分析

如下图电路&#xff0c;电流可以转换成电压&#xff0c;电压也可以转换成电流&#xff1b; 根据虚断&#xff1a;(Vi–V1)/R2 (V1–V4)/R6 &#xff08;a&#xff09; 同理 (V3–V2)/R5V2/R4 &#xff08;b&#xff09; 根据虚短&#xff1a; V1V2 &#xff08;c&#xff09…

centos7装完chrome无法使用yum问题解决

2019独角兽企业重金招聘Python工程师标准>>> 续前文装好chrome后&#xff0c;yum居然用不了&#xff0c;提示错误“Basic XLib functionality test failed!” 呵呵。。。呵呵了.... 【题外话~个人真心觉得pythonseleniumchrome在linux环境下开发和使用 简直蛋疼无比…

实验二第二部分

第二部分 FTP协议分析 1. 两个同学一组&#xff0c;A和B。 2.A同学架设FTP服务器&#xff0c;并设置用户名和密码&#xff0c;例如gao / gao 3.B同学在机器中安装Wireshark&#xff0c;并将其打开&#xff1b;之后用用户名和密码登陆A同学的FTP服务器&#xff0c;并上传一张图片…

运放搭建的跟随电路作用与分析

电压跟随器&#xff0c;顾名思义就是输出电压与输入电压是相同的&#xff0c;就是说电压跟随器的电压放大倍数恒小于且接近1。 电压跟随器的显著特点就是&#xff0c;输入阻抗高&#xff0c;而输出阻抗低。 根据其显著特点&#xff0c;常见的作用如下&#xff1a; 1- 缓冲 在…

Spring Boot(十二)单元测试JUnit

一、介绍 JUnit是一款优秀的开源Java单元测试框架&#xff0c;也是目前使用率最高最流行的测试框架&#xff0c;开发工具Eclipse和IDEA对JUnit都有很好的支持&#xff0c;JUnit主要用于白盒测试和回归测试。 白盒测试&#xff1a;把测试对象看作一个打开的盒子&#xff0c;程序…