在中國古代著名數學著作《孫子算經》卷下第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); }
沒有留言:
張貼留言