congruence 一次合同式 a x≡b (mod m) を満たす x を求める
int congruence(int a, int b, int m);
a 合同式にあるa b 合同式にあるb m 合同式にあるm
合同式の解xの値(0≦x<m)。解が存在しないときは-1。
int congruence(int a, int b, int m) { int c, d, e, f; int q, r; int tmp; c = a; e = b; d = m; f = 0; while ((r = c % d) != 0) { q = c / d; c = d; d = r; tmp = f; f = e - q * f; e = tmp; } if (b % d != 0) return -1; q = (f/d) % (m/d); if (q < 0) q += m/d; return q; }