一元线性同余方程组【数论

来源:互联网 发布:fgo下载全部数据取消 编辑:程序博客网 时间:2024/05/11 00:38

这里写图片描述
http://poj.org/problem?id=2891
数论P56

#include "cstdio"#include <iostream>#include <cstring>#include <cmath>using namespace std;#define ll long longll exgcd(ll a,ll b,ll &x, ll & y){  if(b==0){    x=1;y=0;return a;  }  ll d=exgcd(b,a%b,x,y);  ll t=x;x=y;y=t-a/b*y;  return d;}int main(){  int k;  while(cin>>k){  k--;  bool have_ans=1;  ll a,b,d,c,x,y,b1,m1,b2,m2,m;  cin>>m1>>b1;  while(k--){    cin>>m2>>b2;    a=m1,b=m2,c=b2-b1;    d=exgcd(a,b,x,y);    if(c%d) have_ans=0;    ll s=b/d;    x=x*(c/d);    x=(x%s+s)%s;    b1=x*m1+b1;    m1=m1*m2/d;  }  if(have_ans)cout<<b1<<endl;  else cout<<-1<<endl;  }  return 0;}
0 0
原创粉丝点击