最大公约数
1,试除法
假设给定两个数a和b,最大公约数肯定小于等于min{a,b},我们用a和b取与他们之间较小的数如果结果不等于0,min{a,b}就自减。
//
int main()
{
int a = 18;
int b = 24;
int min = (a > b ? b: a);
while (a % min || b % min)
{
min--;
}
printf("%d", min);
return 0;
}
2,辗转相除法
给定a,b,再定义一个变量c等于a%如果C不等于0,那么就把b的值赋给a,c的值赋给b,以此往复下去。最后的最大公约数就是b。
//
int main()
{
int a = 18;
int b = 24;
int c = 0;
while (c = a % b)
{
a = b;
b = c;
}
printf("%d\n", b);
return 0;
}
3,上述的代码还可以写成一种递归的模式。
//
int GCD(int a, int b)
{
if (0 == a % b)
return b;
else
GCD(b, a % b);
}
int main()
{
int a = 18;
int b = 24;
int ret=GCD(a, b);
printf("%d\n", ret);
return 0;
}
4,辗转相减法
//
int main()
{
int a = 18;
int b = 24;
while (a != b)
{
if (a > b)
a = a - b;
else
b = b - a;
}
printf("%d\n", a);
return 0;
}
5,同样上述的方法也可以写成递归的方式
//
int GCD(int a, int b)
{
if (a == b)
return a;
else if (a > b)
GCD(a - b, b);
else
GCD(b - a, a);
}
int main()
{
int a = 18;
int b = 24;
int ret = GCD(a, b);
printf("%d\n", ret);
return 0;
}
最小公倍数
1,首先也介绍试除法
假定a,b,最小公倍数肯定大于等于max{a,b},所以我们用max对a,
b进行%,如果结果不等于0,max就自增,知道取余的结果为0.
//
int main()
{
int a = 18;
int b = 24;
int max = (a > b ? a : b);
while (max % a || max % b)
{
max++;
}
printf("%d\n", max);
return 0;
}
2,假设最小公倍数为m,那么有m/a=i;m/b=j;此时我们用a✖n(n从1开始不断自增)%b,结果为0时,最小公倍数就是a*n;
//
int main()
{
int a = 18;
int b = 24;
int n = 1;
while (a * n % b)
{
n++;
}
printf("%d\n", a * n);
return 0;
}
3,最小公倍数等于两个数等乘积除以最大公约数
这里我们用上述的辗转相除法为例。
//
int main()
{
int a = 18;
int b = 24;
int c = 0;
int m = a;
int n = b;
while (c = a % b)
{
a = b;
b = c;
}
printf("%d\n", m * n / b);
return 0;
}