Han Xin and His Troops(扩展中国剩余定理 Python版)
题意:
看标题就知道大概了,韩信点兵的典故我们应该都熟悉吧。 给出 $n$ 个同余方程,问是否存在不超过 $m$ 的正整数解。
坑点:
数据比较大,直接用 CRT 会爆 ll,这时候就用 Python 来实现。
AC代码:
n = 110 # 同余方程个数
a = [0]*110 # 余数
m = [0]*110 # 模数
"""扩展欧几里得"""
def exgcd(a, b):
if 0 == b:
return 1, 0, a
x, y, q = exgcd(b, a % b)
x, y = y, (x - a // b * y)
return x, y, q
"""扩展中国剩余定理"""
def CRT():
if n == 1 :
if m[0] > a[0]:
return a[0];
else:
return -1;
for i in range(n):
if m[i] <= a[i] :
return -1;
x, y, d = exgcd(m[0], m[i])
if (a[i] - a[0]) % d != 0:
return -1;
t = m[i] // d;