当前位置: 首页 > news >正文

矩阵快速幂

快速幂

在这里插入图片描述

#include<iostream>
using namespace std;int main(){int a, b, p;cin>>a>>b>>p;int res = 1 % p;while(b){if(b & 1) res = 1ll * res * a % p;a = 1ll * a * a % p;b >>= 1;}cout<<res;return 0;
}

斐波那契数列

在这里插入图片描述

#include <iostream>
using namespace std;
typedef long long ll;
const int Nmax=10, mod=1e9;struct Matrix
{int n,m;int map[Nmax][Nmax];Matrix(int x,int y){n=x;m=y;for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)map[i][j]=0;}Matrix operator * (const Matrix b){Matrix c(n,b.m);if(m==b.n){for(int i=1;i<=c.n;i++)for(int k=1;k<=m;k++)for(int j=1;j<=c.m;j++)c.map[i][j]=(c.map[i][j]+(map[i][k]*b.map[k][j])%mod)%mod;return c;}printf("error!!!!!!!!!!!!!!\n");   return c;}Matrix operator + (const Matrix b){Matrix c(n,m);if(m==b.m && n==b.n){for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)c.map[i][j]=(map[i][j]+b.map[i][j])%mod;return c;}printf("error!!!!!!!!!!!!!!\n");   return c;}void show(){printf("n:%d m:%d\n",n,m);for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)printf("%4d%c",map[i][j],j==m?'\n':' ');}
};
int a,b,n;
int work()
{Matrix base(2,2);base.map[1][1]=a,base.map[1][2]=b;base.map[2][1]=1;//base.show();Matrix ans(2,2);ans.map[1][1]=1,ans.map[2][2]=1;if(n<=2)return 0*printf("1\n");n-=2;while(n){if(n&1)ans=ans*base;base=base*base;n>>=1;}Matrix now(2,1);now.map[1][1]=now.map[2][1]=1;//ans.show();ans=ans*now;//now.show();printf("%d\n",ans.map[1][1]);return 0;
}
int main()
{while(~scanf("%d%d%d",&a,&b,&n)){if(!a && !b && !n)break;work(); }return 0;
}

a ^ n + b ^ n

在这里插入图片描述

#include <iostream>
using namespace std;
typedef unsigned long long ll;
const int Nmax=10;
ll a,b,n;struct Matrix
{int n,m;ll map[Nmax][Nmax];Matrix(int x,int y){n=x;m=y;for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)map[i][j]=0LLu;}Matrix operator * (const Matrix b){Matrix c(n,b.m);if(m==b.n){for(int i=1;i<=c.n;i++)for(int k=1;k<=m;k++)for(int j=1;j<=c.m;j++)c.map[i][j]=c.map[i][j]+map[i][k]*b.map[k][j];return c;}printf("error!!!!!!!!!!!!!!\n");   return c;}Matrix operator + (const Matrix b){Matrix c(n,m);if(m==b.m && n==b.n){for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)c.map[i][j]=map[i][j]+b.map[i][j];return c;}printf("error!!!!!!!!!!!!!!\n");   return c;}void show(){printf("n:%d m:%d\n",n,m);for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)printf("%4llu%c",map[i][j],j==m?'\n':' ');}
};ll work()
{Matrix base(2,2);base.map[1][1]=a,base.map[1][2]=-b;base.map[2][1]=1LLu;//base.show();Matrix ans(2,2);ans.map[1][1]=1LLu,ans.map[2][2]=1LLu;ll newa=a*a-2LLu*b;if(n==2)return newa;if(n==1)return a;if(n==0)return 2LLu;n-=2LLu;while(n){if(n&1LLu)ans=ans*base;base=base*base;n>>=1;}Matrix now(2,1);now.map[1][1]=newa;now.map[2][1]=a;//ans.show();ans=ans*now;//now.show();return ans.map[1][1];
}
int main()
{while(~scanf("%llu%llu%llu",&a,&b,&n)){if(!a && !b && !n)break;printf("%llu\n",work());}return 0;
}
http://www.lryc.cn/news/324182.html

相关文章:

  • 数据之谜:解读Facebook的用户行为
  • 学习 考证 帆软 FCP-FineBI V6.0 考试经验
  • 《过滤器模式(极简c++)》
  • 【C++】如何用一个哈希表同时封装出unordered_set与unordered_map
  • Day45:WEB攻防-PHP应用SQL二次注入堆叠执行DNS带外功能点黑白盒条件
  • web安全之:三种常见的Web安全威胁
  • C#,图论与图算法,用于检查给定图是否为欧拉图(Eulerian Graph)的算法与源程序
  • Dubbo框架的介绍
  • 手机实时监控电脑屏幕(手机可以看到电脑在干什么吗)
  • 合成孔径雷达干涉测量InSAR数据处理、地形三维重建、形变信息提取、监测
  • 云原生(五)、Docker-Swarm集群
  • arm核的DMPIS是如何计算的
  • Axure RP 9 for Mac中文激活版:原型设计工具
  • Hive 数据迁移与备份
  • FFMpeg 获取音频音量、提高音量
  • 【java数据结构】基于java提供的ArrayList实现的扑克牌游戏-(附源码~)
  • R语言:microeco:一个用于微生物群落生态学数据挖掘的R包,第八:trans_func class
  • 王道c语言-二叉树前序、中序、后序、层次遍历
  • <REAL-TIME TRAFFIC OBJECT DETCTION FOR AUTONOMOUS DRIVING>论文阅读
  • 优化 - 排序算法
  • Python实战:深拷贝与浅拷贝
  • rollup打包起手式
  • 【笔记】语言实例比较 3. 无重复字符的最长子串 C++ Rust Java Python
  • int的大小你知道时4个字节,那么类的大小你知道怎么计算吗?
  • OpenCV学习笔记(十一)——利用Sobel算子计算梯度
  • 扩展一下BenchmarkSQL,新增支持ASE/HANA/DB2/SQLServer,可以随便用了
  • Android 静默安装成功后自启动
  • 计算机二级真题讲解每日一题:《format格式化》
  • RabbitMQ问题
  • flutter->Scaffold左侧/右侧侧边栏和UserAccountsDrawerHeader的使用