1.辗转相除法
用(a,b)表示a和b的最大公约数
有定理: 已知a,b,c为正整数,若a除以b余c,则(a,b)=(b,c)。 (证明过程请参考其它资料)
例如:求gcd(319,377): ∵ 377÷319=1(余58) ∴gcd(377,319)=gcd(319,58); ∵ 319÷58=5(余29), ∴ gcd(319,58)=gcd(58,29); ∵ 58÷29=2(余0), ∴ gcd(58,29)= 29; ∴ gcd(319,377)=29.
算法实现#include <iostream> #include <math.h> using namespace std; int gcd1(int a,int b)//递归版本 { if (a<b) //确定被除数和除数 { int temp=a; a=b; b=temp; } if (b==0) //求出结果 { return a; } else { <