版权声明:感谢观看我的博客https://me.csdn.net/weixin_43794314 https://blog.csdn.net/weixin_43794314/article/details/85222857
最大公约数 = 两数之积 / 最小公倍数,所以只要求出一个即可。
辗转相除法:(求最大公约数)
有两整数a和b(a>b), a%b得余数c,若c=0,则b即为两数的最大公约数
若c≠0,则a = b,b = c,继续求余数。
最小公倍数:
定义一个变量从1开始,每增1对这几个数进行求余运算,直到这几个数的
余数为0,此时该数即为这几个数的最小公倍数。
最小公倍数总是大于或等于这几个数中的最大数,小于或等于这几个数的乘积。
利用这一性质也可以反过来编程,即从这几个数的乘积减1开始自减,进行求余预算即可。
方法一:
void fun(int m, int n)
{
int yueshu = m%n;
int x = m*n; //记录m*n为后面求公倍数
if(yueshu == 0)
printf("%d %d\n",n,x/n);
else
{
while(yueshu != 0)
{
m = n;
n = yueshu;
yueshu = m%n;
}
printf("%-5d %-5d\n",n,x/n);
}
}
方法二:
void fun(int a,int b)
{
int i, min = a*b, max = 1;
for(i = 2; i <= a; i++)
{
if(a%i == 0 && b%i == 0)
max = i;
}
for(i = a*b-1; i >= a; i--)
{
if(i%a == 0 && i%b == 0)
min = i;
}
printf("%-5d %-5d\n",max,min);
}