求最大公约数与最小公倍数
求两正整数的最大公约数,用辗转相除法。
1 #include<assert.h> 2 3 #define swap(a,b,type) do{ type t; t=a; a=b; b=t; }while(0) 4 5 int gcd(int a,int b) 6 { 7 int t; 8 assert(a>0&&b>0); 9 10 if(a<b) 11 swap(a,b,int); 12 while(b) 13 { 14 t=a%b; 15 a=b; 16 b=t; 17 } 18 return a; 19 }
求两正整数的最小公倍数,方法是a*b/gdc(a,b)
1 #include<assert.h> 2 int lcm(int a,int b) 3 { 4 assert(a>0&&b>0); 5 return a*b/gcd(a,b); 6 }