这周主要学习了数论之同余问题,用扩展欧几里德算法求解线性同余方程。只看理论感觉这类问题应该是比较基础的,但由于由于没太有有数论的基础,所以还是为难了我很久,思考起来感觉有些复杂,但是单看代码的长度来说,感觉还是可以完成的。
欧几里得算法,欧几里德算法又称辗转相除法,用于计算两个整数a,b的最大公约数。这个在之前学习C++的时候就练习过,所以学起来比较轻松; 扩展欧几里德算法,扩展欧几里德算法是用来在已知a, b求解一组p,q使得p*a+q*b = gcd(a, b) (解一定存在,根据数论中的相关定理)。线性同余方程,对于方程 a*x+b*y=n;有整数解得充分必要条件是(n%(a,b)==0),有个例题:同余方程:P1082 [NOIP2012 提高组] 同余方程 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
题目转化为,其必要条件为1mod gcd(a,b)=0;中国剩余定理,感觉和小学做的练习思维的数学难题差不多,几除几剩几,不过这一部分公式还需要再记一下。