目录

线性同余方程

1.同余方程

2.青蛙的约会

3.最幸运的数字

4.曹冲养猪

矩阵乘法

1.斐波那契前 n 项和


线性同余方程

用扩展欧几里得算法来求线性同余方程

ax+by=1

则解除的x,y有多组解为

x=x0+k*b

y=y0-k*a 其中x0和y0是解出来的解,k是整数

则最小正整数解为x0%b,y0%a

扩展欧几里得模板

int exgcd(int a,int b,int &x,int &y)//拓展欧几里得求ax+by=d的方程
{if(!b){x=1,y=0;return a;}int d=exgcd(b,a%b,y,x);y-=a/b*x;return d;
}

1.同余方程

203. 同余方程 - AcWing题库

ax=1(mod b)转化为ax+by=1,则直接用拓展欧几里得算法即可求x,y,最小x解为x0%b

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e7+10;
int prime[N],cnt;
bool st[N];
int phi[N];
ll s[N];//记录欧拉函数的前缀和
int exgcd(int a,int b,int &x,int &y)//拓展欧几里得求ax+by=d的方程
{if(!b){x=1,y=0;return a;}int d=exgcd(b,a%b,y,x);y-=a/b*x;return d;
}
int main()
{int a,b;cin>>a>>b;int x,y;exgcd(a,b,x,y);//求x,ycout<<((x%b)+b)%b<<endl;//输出mo出来是正的数return 0;
}

2.青蛙的约会

222. 青蛙的约会 - AcWing题库

两个青蛙相距b-a米,而每次能缩小跳m-n米,问至少跳多少次使得两个青蛙碰面

设跳了t次,则跳过的距离为t*(m-n)米,又因为是个圈,则设绕了y圈,若相遇则总的米数为

t*(m-n)=(b-a)+y*l,则直接用扩展欧几里得可得t0,则最小的t为t0%l/d

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll exgcd(ll a,ll b,ll &x,ll &y)//拓展欧几里得求ax+by=d的方程
{if(!b){x=1,y=0;return a;}ll d=exgcd(b,a%b,y,x);y-=a/b*x;return d;
}
int main()
{ll a,b,n,m,l;cin>>a>>b>>m>>n>>l;ll x,y;ll d=exgcd(m-n,l,x,y);if((b-a)%d) puts("Impossible");//假如b-a不是公约数else{x*=(b-a)/d;//将x扩大相应的倍数ll t=abs(l/d);//将d除过来,让右边为1,才能用t0%b为最小这个定里cout<<((x%t)+t)%t<<endl;//输出最小结果}return 0;
}

3.最幸运的数字

202. 最幸运的数字 - AcWing题库

龟速乘解决乘法爆longlong的情况

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll get_euler(ll c)//获取一个数的欧拉数
{ll res=c;for(ll i=2;i<=c/i;i++)if(c%i==0){while(c%i==0) c/=i;res=res/i*(i-1);//套欧拉函数的公式}if(c>1) res=res/c*(c-1);return res;
}
ll qmul(ll a,ll k,ll p)//龟速乘
{ll res=0;while(k){if(k&1) res=(res+a)%p;a=(a+a)%p;k>>=1;}return res;
}
ll qmi(ll a,ll k,ll p)//快速幂
{ll res=1;while(k){//res=(__int128_t)res*a%p也行if(k&1) res=qmul(res,a,p);//因为乘法会爆ll,所以用龟速乘//a=(__int128_t)a*a%p也行a=qmul(a,a,p);//因为乘法会爆ll,所以用龟速乘k>>=1;}return res;
}
int main()
{int T=1;ll l;while(cin>>l,l){int d=1;while(l%(d*2)==0&&d*2<=8) d*=2;ll c=9*l/d;//获取要整除的Cll phi=get_euler(c);//获取他的欧拉数ll res=1e18;if(c%2==0||c%5==0) res=0;//假如跟10不互质,则没答案for(ll d=1;d*d<=phi;d++)//枚举欧拉数的所有约数if(phi%d==0)//假如这个是约数了{if(qmi(10,d,c)==1) res=min(res,d);//判断符不符合条件if(qmi(10,phi/d,c)==1) res=min(res,phi/d);//判断符不符合条件}printf("Case %d: %lld\n",T++,res);}return 0;
}

__int128_t解决乘法爆longlong的情况

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll get_euler(ll c)
{ll res=c;for(ll i=2;i<=c/i;i++)if(c%i==0){while(c%i==0) c/=i;res=res/i*(i-1);}if(c>1) res=res/c*(c-1);return res;
}
ll qmi(ll a,ll k,ll p)
{ll res=1;while(k){if(k&1) res=(__int128_t)res*a%p;a=(__int128_t)a*a%p;k>>=1;}return res;
}
int main()
{int T=1;ll l;while(cin>>l,l){int d=1;while(l%(d*2)==0&&d*2<=8) d*=2;ll c=9*l/d;ll phi=get_euler(c);ll res=1e18;if(c%2==0||c%5==0) res=0;for(ll d=1;d*d<=phi;d++)if(phi%d==0){if(qmi(10,d,c)==1) res=min(res,d);if(qmi(10,phi/d,c)==1) res=min(res,phi/d);}printf("Case %d: %lld\n",T++,res);}return 0;
}

4.曹冲养猪

信息学奥赛一本通(C++版)在线评测系统 (ssoier.cn)

中国剩余定理

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=11;
int A[N],B[N];
int n;
ll exgcd(ll a,ll b,ll &x,ll &y)//用扩展欧几里得求逆元
{if(!b){x=1,y=0;return a;}ll d=exgcd(b,a%b,y,x);y-=a/b*x;return d;
}
int main()
{cin>>n;ll M=1,res=0;for(int i=0;i<n;i++){scanf("%d%d",&A[i],&B[i]);M*=A[i];//处理所有的乘积}for(int i=0;i<n;i++){ll Mi=M/A[i];//获取Mill ti,x;exgcd(Mi,A[i],ti,x);//求Mi的逆元tires+=B[i]*Mi*ti;//图片中有讲答案加上即可}cout<<((res%M)+M)%M<<endl;//输出正的模余数return 0;
}

矩阵乘法

1.斐波那契前 n 项和

1303. 斐波那契前 n 项和 - AcWing题库

信息学奥赛一本通(C++版)在线评测系统 (ssoier.cn)

因为数很大不能直接用公式fn=fn-1+fn-2求,得用矩阵乘法来求

定义一个矩阵Fn=[fn,fn+1]

这题构造一个Fn=【fn,fn+1,sn】的矩阵,是前 fn项和,则A矩阵如下:

然后A的n-1次方用快速幂求出来就行了,logn的时间

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=3;
int n,m;
void mul(int c[],int a[],int b[][N])
{int temp[N]={0};for(int i=0;i<N;i++)//矩阵乘法for(int j=0;j<N;j++)temp[i]=(temp[i]+(ll)a[j]*b[j][i])%m;memcpy(c,temp,sizeof temp);
}
void mul(int c[][N],int a[][N],int b[][N])
{int temp[N][N]={0};for(int i=0;i<N;i++)//矩阵乘法for(int j=0;j<N;j++)for(int k=0;k<N;k++)temp[i][j]=(temp[i][j]+(ll)a[i][k]*b[k][j])%m;memcpy(c,temp,sizeof temp);
}
int main()
{cin>>n>>m;int f1[N]={1,1,1};//f1为1时的矩阵int a[N][N]={{0,1,0},{1,1,1},{0,0,1}};//a矩阵n--;//求Fn-1while(n){if(n&1) mul(f1,f1,a);//res=res*amul(a,a,a);//a=a*a;n>>=1;}cout<<f1[2]<<endl;//输出Fn-1的中的f(n-1)+1=fnreturn 0;
}

线性同余方程和矩阵乘法相关推荐

  1. 矩阵乘法递推的优化艺术

    对于一个线性递推式,求它第项的值,通常的做法是先构造一个的矩阵,然后在时间内求出. 其实,由于这个矩阵的特殊性,可以将时间优化到.接下来我会以一个题目来讲解矩阵乘法递推的优化. 题目:http://w ...

  2. 十个利用矩阵乘法解决的经典题目

    出自matrix67.com 好像目前还没有这方面题目的总结.这几天连续看到四个问这类题目的人,今天在这里简单写一下.这里我们不介绍其它有关矩阵的知识,只介绍矩阵乘法和相关性质.     不要以为数学 ...

  3. [学习笔记]矩阵乘法及其优化dp

    1.定义: $c[i][j]=\sum a[i][k]\times b[k][j]$ 所以矩阵乘法有条件,(n*m)*(m*p)=n*p 即第一个矩阵的列数等于第二个矩阵的行数,否则没有意义. 2.结 ...

  4. 0x34.数学 - 矩阵乘法

    目录 矩阵 luogu P3390 [模板]矩阵快速幂 AcWing 205. 斐波那契 P1939 [模板]矩阵加速(数列) AcWing 206. 石头游戏 声明: 本系列博客是<算法竞赛进 ...

  5. 矩阵乘法的本质是什么

    作者:知乎用户 链接:https://www.zhihu.com/question/21351965/answer/31050145 本题目前下面的解释都是线性代数教材上的各种定义,但都太过复杂了.我 ...

  6. 【Android 应用开发】Paint 滤镜原理 之 颜色矩阵 ( 颜色模式 | 颜色通道 | 颜色矩阵 | 矩阵运算 | 矩阵乘法 | 矩阵加法 | 颜色矩阵深入解析 )

    文章目录 颜色模式 颜色通道 Android 中的颜色矩阵 矩阵乘法运算 滤镜中的矩阵乘法运算 矩阵加法运算 滤镜中的矩阵乘法运算 滤镜运算原理 ( 总结 ) 实际滤镜理论示例 颜色模式 颜色模式 : ...

  7. 循环取矩阵的某行_1.2 震惊! 某大二本科生写的矩阵乘法吊打Mathematica-线性代数库BLAS-矩阵 (上)...

    本文是 1. 线性代数库BLAS​zhuanlan.zhihu.com 系列的第二篇, 将讲述矩阵类的结构和矩阵基础运算的AVX2加速算法. 1. 矩阵类的结构 在讲述矩阵各种算法之前很有必要详解一下 ...

  8. ICML 2021文章引发热议:矩阵乘法无需相乘,速度提升100倍

    ©作者 | Synced 来源 | 机器之心 在一篇被 ICML 2021 接收的论文中,MIT 的一位计算机科学博士生及其业界大佬导师为矩阵乘法引入了一种基于学习的算法,该算法具有一个有趣的特性-- ...

  9. 稀疏矩阵加法运算_1.2 震惊! 某大二本科生写的矩阵乘法吊打Mathematica-线性代数库BLAS-矩阵 (上)...

    本文是 1. 线性代数库BLAS​zhuanlan.zhihu.com 系列的第二篇, 将讲述矩阵类的结构和矩阵基础运算的AVX2加速算法. 1. 矩阵类的结构 在讲述矩阵各种算法之前很有必要详解一下 ...

最新文章

  1. LR12的log解释
  2. Qt读写ini文件的问题
  3. c++ 前缀 变量命名_前缀命名
  4. FreeModbus移植到STM32F107(以太网传输方式)
  5. 电话拨号器java_Android基础--电话拨号器
  6. Android Fragment + ViewPater + Fragment嵌套Fragment实战
  7. sap销售发货的流程_基于SAP系统批量创建销售订单及交货单过账的方法与流程
  8. 【SDE】随机微分方程(1)
  9. 关于材料设计vector矢量图形
  10. bi项目中数据仓库的维度表和事实表
  11. matlab 平滑曲线连接_如何使用Affinity Designer for mac编辑矢量曲线和形状
  12. 牛客高级项目课(仿牛客网)笔记
  13. win10开机密码怎么取消
  14. Color Models (RGB, CMY, HSI)
  15. 计算机组装方案i5,3000元预算方案i5 8400/GTX1050Ti装配配置清单推荐
  16. java中bio_java中bio是什么
  17. 解析Activity中的onCreate方法
  18. 阿里云短信api发送异常
  19. c加加高级语言循环结构,高级C语言循环结构程序设计.ppt
  20. 何亮Freebsd Unix安装配置视频教程

热门文章

  1. 网络的性能指标:带宽和延迟
  2. 文件Md5计算(C语言版)
  3. PHP开发Android应用程序
  4. 从键盘输入一个整数,判断它是正数,负数,0
  5. html显示器对象属性,Web网站中利用JavaScript中ActiveXObject对象获取硬件信息(显示器数量、分辨率)从而进行单双屏跳转...
  6. 镜像 网站 linux 程序,腾讯开源镜像网站(腾讯云软件源)地址,附使用说明
  7. try/catch 的解释与用法
  8. java imageio temp_java-使用ImageIO.write jpg文件时出现问题:粉红色背景
  9. MapBoxGL.JS 画圆 (半径以米或千米为单位) 实现跟随地图缩放而缩放
  10. 盘点2021款iPad Pro 5个增强功能,与上一代有什么区别?