题目:
- 用广义欧几里得除法求两个整数的最大公因数。
- 用定理1.3.7求s和t使得:sa+tb = (a,b) 。
以上两题要求对任意大整数给出结果。
这里给出python的题解。
这个表是对定理的打表:
递推式为:
因此用递推可得。
因为前三行的下标为-1,-2,所以用个n替换
n和j遵循同样的递推式。
因此建议直接建立一个新的递推表,下标直接沿用成n相关,验证同等位置是否和原来遵循相同的规律就好。
不要让原来有时候 j-1,有时候j+1, j和行数还完全不一样干扰自己。
把表转换成计算机能够直接读懂的模式!
把*看成0输入到列表。
Python的list类似于C++的vector,没定义之前不能直接使用,没插入值之前也不能直接下标调用。
注意:Python的整除不是/ ,而是//
源代码是:
def gcd(big, small):
while small:
r = big % small
big = small
small = r
return str(big)
def ex_gcd(a, b):
s = [0, 1, 0]
t = [0, 0, 1]
r = [a, b]
r.append(r[0] % r[1])
q = [0, 0, r[0] // r[1]