若某数x分别被d1、、…、dn除得的余数为r1、r2、…、rn,则可表示为下式:
x=R1r1+R2r2+…+Rnrn+RD
其中R1是d2、d3、…、dn的公倍数,而且被d1除,余数为1;
R1 、R2…、Rn是d1、d2、…、dn-1的公倍数,而且被dn除,余数为1;
D是d1、d2、…、的最小公倍数;
R是任意整数,可根据实际需要决定;
且d1、、…、必须互质,以保证每个Ri(i=1,2,…,n)都能求得.
实际上POJ1006就是中国剩余定理的典型应用
根据上面的条件求出常数R1 = 5544,R2 = 14421,R3 = 1288,D = 21252
每次给的数据中的前三个值即相当于上面的余数。
则显然:
res = R1 * Physical + R2 * Emotion + R3 * Intelligence + RD - givenDate
并且0 =< res <= D
原代码如下:
















/****************************************************
//find the value of R1, R2 and R3 according to 中国剩余定理#include<stdio.h>
int main()
{
int i;
int R1, R2, R3;
for(i=1, R1=28*33; 1; i++)
if(R1*i%23==1)
break;
R1 *= i;
for(i=1, R2=23*33; 1; i++)
if(R2*i%28==1)
break;
R2 *= i;
for(i=1, R3=23*28; 1; i++)
if(R3*i%33==1)
break;
R3 *= i;
printf("R1 = %d R2 = %d R3 = %d ",R1,R2,R3);
return 0;
}
*****************************************************/