首页 > 代码库 > 中共剩余定理
中共剩余定理
#include<iostream> #include<stdio.h> using namespace std; #define LL __int64 #define ll I64 void exgcd(LL a,LL b,LL &d,LL &x,LL &y) { if(b==0) { d=a; x=1; y=0; } else { exgcd(b,a%b,d,y,x); x=-1*x; y=-1*y; y+=(a/b)*x; } return ; } int main() { LL k,a1,r1,a2,r2,d,x,y; while(scanf("%lld",&k)!=EOF) { LL flag=1; scanf("%lld%lld",&a1,&r1); for(LL i=1;i<k;i++) { scanf("%lld%lld",&a2,&r2); exgcd(a1,a2,d,x,y); if((r2-r1)%d) flag=0; if(flag) { x=(r2-r1)/d*x; y=a2/d; x=(x%y+y)%y; r1=x*a1+r1; a1=(a1*a2)/d; } } exgcd(1,a1,d,x,y); if(r1%d) flag=0; if(flag==0) printf("-1\n"); else { x=r1/d*x; y=a1/d; x=(x%y+y)%y; printf("%lld\n",x); } } return 0; }
中共剩余定理
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。