poj 2891
来源:互联网 发布:sql的distinct怎么删除 编辑:程序博客网 时间:2024/06/12 00:00
转载:
/**********************一般模线性方程组***********************/
同样是求这个东西。。
X mod m1=r1
X mod m2=r2
...
...
...
X mod mn=rn
首先,我们看两个式子的情况
X mod m1=r1……………………………………………………………(1)
X mod m2=r2……………………………………………………………(2)
则有
X=m1*k1+r1………………………………………………………………(*)
X=m2*k2+r2
那么 m1*k1+r1=m2*k2+r2
整理,得
m1*k1-m2*k2=r2-r1
令(a,b,x,y,m)=(m1,m2,k1,k2,r2-r1),原式变成
ax+by=m
熟悉吧?
此时,因为GCD(a,b)=1不一定成立,GCD(a,b) | m 也就不一定成立。所以应该先判 若 GCD(a,b) | m 不成立,则!!!方程无解!!!。
否则,继续往下。
解出(x,y),将k1=x反代回(*),得到X。
于是X就是这两个方程的一个特解,通解就是 X'=X+k*LCM(m1,m2)
这个式子再一变形,得 X' mod LCM(m1,m2)=X
这个方程一出来,说明我们实现了(1)(2)两个方程的合并。
令 M=LCM(m1,m2),R=r2-r1
就可将合并后的方程记为 X mod M = R。
然后,扩展到n个方程。
用合并后的方程再来和其他的方程按这样的方式进行合并,最后就能只剩下一个方程 X mod M=R,其中 M=LCM(m1,m2,...,mn)。
那么,X便是原模线性方程组的一个特解,通解为 X'=X+k*M。
如果,要得到X的最小正整数解,就还是原来那个方法:
X%=M;
if (X<0) X+=M;
#include <iostream>#include <cstdio>#include<cmath>#include<algorithm>#include<cstdlib>#define max 100000using namespace std;long long ex_gcd(long long a,long long b,long long &x,long long &y){ if(!b) { x=1; y=0; return a; } int d=ex_gcd(b,a%b,x,y); int t=x; x=y; y=t-a/b*y; return d;}long long ex_crl(long long *w,long long *a,long long n){ long long m=w[0],r=a[0]; long long x,y; for(int i=1;i<n;++i) { long long d=ex_gcd(m,w[i],x,y); if((a[i]-r)%d) return -1; long long t=(w[i]/d); x=(x*((a[i]-r)/d)%t+t)%t;//最小正整数解 r+=x*m;//特解 m=m*w[i]/d;//lcm r%=m;//特解%lcm } if(r<0) r+=m; return r;}int main(){ int n; while(cin>>n) { long long w[max],a[max]; for(int i=0;i<n;++i) cin>>w[i]>>a[i]; cout<<ex_crl(w,a,n)<<endl; } return 0;}
- poj 2891
- poj 2891
- poj 2891
- poj 2891
- POJ 2891 扩展欧几里得
- poj 2891
- POJ 2891 扩展欧几里德
- POJ 2891解题报告
- POJ 2891 扩展欧几里得
- POJ
- poj
- POJ
- POJ
- poj
- poj
- POJ
- POJ
- poj
- 基本积分表
- WebAPI从Post的Body中解析出JObject格式的Request参数
- 判断网络状态是否可用
- std::multiset 的使用
- jvm参数
- poj 2891
- Chrome谷歌浏览器中js代码Array.sort排序的bug乱序解决办法
- Revit二次开发之快速过滤与慢速过滤【比目鱼原创】
- SVM To Face Recognize
- hdu4790 Just Random
- Rhyme/Quick Sort 快速排序Java版
- 开始学习android开发
- [ZJOI2006]书架 Treap
- 转载:Spring Boot (十五):springboot+jpa+thymeleaf增删改查示例