poj2891 Strange Way to Express Integers 解线性同余方程的应用
来源:互联网 发布:ar游戏源码 编辑:程序博客网 时间:2024/05/17 06:01
这是以前做过的一道题目,只不过那时候瞎来,看了别人的题解是另一种方法,这次纯自己做出的,就是简单的解线性同余方程
不打解析过程了,只打一个解线性同余方程的方法,自己以后回顾这道题目的时候可以看看思考做:
x≡b1(mod m1)
x≡b2(mod m2)
令m=[m1,m2]
首先此方程有解的充分必要条件是 (m1,m2) | (b1-b2),此时方程仅有一个小于0的非负整数解,
式子1:等价于 x=b1+m1y1;
式子2:等价于 x=b2+m2y2;
联立可得 b1+m1y1=b2+m2y2,移项 m2y2-m1y1=b1-b2,一看就是用扩展欧几里德来解决了
给例子
x≡r1(mod a1)
x≡r2(mod a2)
x≡r3(mod a3)
.
.
.
x≡rn(mod an);
bool flag=false;scanf("%I64d %I64d",&a1,&r1);for(int i=1;i<n;i++){scanf("%I64d %I64d",&a2,&r2);LL a=a1,b=a2,c=r2-r1;LL x0,y0;LL gcd=exgcd(a,x0,b,y0);if(c%gcd!=0)flag=true;LL MOD=b/gcd;x0=((x0*c/gcd)%MOD+MOD)%MOD;r1=a1*x0+r1;a1*=(a2/gcd);}if(flag)puts("-1");elseprintf("%I64d\n",r1);
接下来本题代码
#include<iostream>#include<cstdio>#include<list>#include<algorithm>#include<cstring>#include<string>#include<queue>#include<stack>#include<map>#include<vector>#include<cmath>#include<memory.h>#include<set>#define ll long long#define LL __int64#define eps 1e-8#define e 2.718281828//const ll INF=9999999999999;#define M 400000100#define inf 0xfffffffusing namespace std;//vector<pair<int,int> > G;//typedef pair<int,int> P;//vector<pair<int,int>> ::iterator iter;////map<ll,int>mp;//map<ll,int>::iterator p;////vector<int>G[30012];LL exgcd(LL a,LL &x,LL b,LL &y){if(b==0){x=1;y=0;return a;}LL r=exgcd(b,x,a%b,y);LL tmp=x;x=y;y=tmp-a/b*y;return r;}int main(void){int t;LL a1,r1,a2,r2;while(cin>>t){bool flag=false;scanf("%I64d %I64d",&a1,&r1);for(int i=1;i<t;i++){scanf("%I64d %I64d",&a2,&r2);LL a=a1,b=a2,c=r2-r1;LL x0,y0;LL gcd=exgcd(a,x0,b,y0);if(c%gcd!=0)flag=true;LL MOD=b/gcd;x0=((x0*c/gcd)%MOD+MOD)%MOD;r1=a1*x0+r1;a1*=(a2/gcd);}if(flag)puts("-1");elseprintf("%I64d\n",r1);}}
- poj2891 Strange Way to Express Integers 解线性同余方程的应用
- POJ2891 Strange Way to Express Integers(解多元线性同余方程)
- Strange Way to Express Integers(poj2891线性同余方程组)
- POJ2891 Strange Way to Express Integers 线性同余方程组
- POJ2891 Strange Way to Express Integers(解多元线性同余方程)(中国剩余定理非互质版)(例题)
- 【POJ2891】Strange Way to Express Integers-解一元线性同余方程组
- poj2891 Strange Way to Express Integers【解一元线性同余方程组模板】
- poj2891 Strange Way to Express Integers 同余方程组
- [数论] 同余方程组 poj2891 Strange Way to Express Integers
- POJ2891——Strange Way to Express Integers(一元线性同余方程组)
- POJ2891 Strange Way to Express Integers【一元线性同余方程组】
- POJ2891 Strange Way to Express Integers 一元线性同余方程组
- POJ-2891-Strange Way to Express Integers(解线性同余方程)
- poj - 2891 Strange Way to Express Integers【线性同余方程】
- poj2891 Strange Way to Express Integers 扩展欧几里德的应用
- POJ 2891 Strange Way to Express Integers(解一元线性同余方程组)
- POJ 2891 Strange Way to Express Integers 解一元线性同余方程组
- poj 2891 Strange Way to Express Integers(解线性同余方程组) + hdu 1573
- AIDE 2.1.5破解及汉化版
- GetMessage以及消息循环说明
- 关于File:dockcont.cpp Line:42 错误
- Python学习笔记之一: 函数参数
- shell 脚本---统计文件中单词的频率
- poj2891 Strange Way to Express Integers 解线性同余方程的应用
- 计算机基础--第一
- 一生做对三件事
- TCP/IP : 网络因此互联
- linux下oracle 11g一些简单的操作和一些错误处理
- 开发随笔一
- ALSA声卡驱动中的DAPM详解之六:精髓所在,牵一发而动全身
- 机器学习笔记一
- 出现您无权查看该网页(您可能没有权限用您提供的凭据查看此目录或网页)的解决办法