在中國古代著名數學著作《孫子算經》卷下第28题,叫做“物不知數”,原文如下:
有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二。问物几何?
即,一個整數除以三餘二,除以五餘三,除以七餘二,求這個整數。
克罗内克符号
使用该符号,即可给出上述一般同餘方程组的求解过程,分两步完成
#include<stdio.h>
#define DBG 1
int w[3],b[3];
int extgcd(int a, int b, int & x, int & y){
if (b == 0) { x=1; y=0; return a; }
int d = extgcd(b, a % b, x, y);
int t = x; x = y; y = t - a / b * y;
return d;
}
int china(int k){
int i, d, x, y, m, a = 0, n = 1;
for (i = 0; i < k; i++) n *= w[i];
for (i = 0; i < k; i++) {
m = n / w[i];
d = extgcd(w[i], m, x, y);
a += (y * m * b[i]) % n;
if(DBG)printf("a y m b %d %d %d %d\n",a,y,m,b[i]);
}
if (a > 0) return a;
else return (a + n);
}
int main(){
w[0]=3,w[1]=5,w[2]=7,b[0]=0,b[1]=3,b[2]=4;
int ans = china(2);
printf("ans: %d\n",ans);
}
沒有留言:
張貼留言