欧几里得算法的拓展主要是用于求解 : 已知整数 a, b,然后我们进行 ax + by == gcd(a , b) 的问题求解 那么如何进行求解呢?和欧几里得算法一样, 我们需要进行递归的方式进行问题的求解, 而且涉及到 a % b 与 a / b 和 a 的关系 我们假设已经是求出了 b x' + ( a % b ) y' == gcd(a, b); 利用关系, 我们就可以进一步回溯 a y' + b (x' - a / b * y') == gcd(a, b); 但是注意, 这里面…
gcd(欧几里得算法辗转相除法): gcd ( a , b )= d : 即 d = gcd ( a , b ) = gcd ( b , a mod b ):以此式进行递归即可. 之前一直愚蠢地以为辗转相除法输进去时 a 要大于 b ,现在发现事实上如果 a 小于 b,那第一次就会先交换 a 与 b. #include<stdio.h> #define ll long long ll gcd(ll a,ll b){ ?a:gcd(b,a%b); } int main(){ ll a,b; wh…
欧几里德算法又称辗转相除法,用于计算两个整数a,b的最大公约数. 基本算法:设a=qb+r,其中a,b,q,r都是整数,则gcd(a,b)=gcd(b,r),即gcd(a,b)=gcd(b,a%b). 递归版算法: int gcd(int a,int b) { ) return a; return gcd(b,a%b); } 递归优化版: int gcd(int a,int b) { return b ? gcd(b,a%b) : a; } 迭代版: int Gcd(int a, int b)…