求最大公约数 最小公倍数:
最大公约数
•几个数公有的约数,叫做这几个数的公约数,其中最大的一个叫做这几个数的最大公约数
•数学上,a和b的最大公约数记为(a, b)
•编程中,计算两个数最大公约数的方法通常记为gcd(a,b)
最小公倍数
•几个数公有的倍数,叫做这几个数的公倍数,其中最小的一个叫做这几个数的最小公倍数
•数学上,a和b的最小公倍数记为[a,b]
•编程中,计算两个数最小公倍数的方法通常记为lcm(a,b)
•a x b = gcd(a, b) x lcm(a,b)
互质
•如果两个数的最大公约数是1,则称这两个数互质
解决方案:
#include <stdio.h>
int divisor(int a, int b)
{
int c = a;
//int c = (a < b) ? a : b;
if (a > b)
{
c = b; //求最小值的算法
}
while (c>1)
{
if (a % c == 0 && b % c == 0)
{
return c;
}
--c;
}
return 1;
}
int multiple(int a, int b)
{
int c = (a < b) ? a : b;
while (1)
{
if (c % a == 0 && c % b == 0)
{
break;
}
++c;
}return c;
}
int multiple2(int a, int b)
{
return a * b / divisor(a, b);
}
int div(int a, int b)
{
int c;
if (a<b)
{
c = a;
a = b;
b = c;
}
c = a % b;
while (c!=0)
{
a = b;
b = c;
c = a % b;
}
return b;
}
int main()
{
//int n = divisor(77, 33);
printf("最大公约数=%d\n", div(77, 33));
printf("最大公约数=%d\n", divisor(77, 33));
printf("最小公倍数=%d\n", multiple(18,48));
printf("最小公倍数=%d\n", multiple2(18, 48)); //两数相乘除以最大公约数,就是最小公倍数
printf("相乘=%d\n",18*48);
return 0;
}