孙子定理是中国古代求解一次同余式组(见同余)的方法。是数论中一个重要定理。又称中国余数定理。一元线性同余方程组问题最早可见于中国南北朝时期(公元5世纪)的数学著作《孙子算经》卷下第二十六题,叫做“物不知数”问题,原文如下:
#include<stdio.h> #include<stdlib.h> #define FORa(i,s,e) for(int i=s;i<=e;i++) #define FORs(i,s,e) for(int i=s;i>=e;i--) using namespace std; const int T=1000; int t,w[T+1],b[T+1],n=1,ans; int Exgcd(int a,int b,int &x,int &y) { int ret,temp; if(!b) { x=1,y=0; return a; } ret=Exgcd(b,a%b,x,y); temp=x; x=y; y=temp-a/b*y; return ret; } int main() { int x,y; scanf("%d",&t); FORa(i,1,t) scanf("%d%d",&w[i],&b[i]),n*=w[i]; FORa(i,1,t) { int m=n/w[i]; Exgcd(w[i],m,x,y); ans=(ans+y*b[i]*m)%n; } if(ans>0) printf("%d",ans); else printf("%d",ans+n); return 0; } /*3 3 2 5 3 7 2*/
原文:https://www.cnblogs.com/SeanOcean/p/11255793.html