19、从键盘输入两个数字n,m,求解n,m的最小公倍数

/*
从键盘输入两个数字n,m,求解n,m的最小公倍数
*/

#include <stdio.h>
#include <stdlib.h>

void getLowsetComMul(int num1,int num2)//m,n乘积除以最大公约数即为最小公倍数
{
    int maxComMul = num1 * num2;
    int remain = 1;
    while(0 != remain)
    {
       /*假设用f(x,y)表示x,y的最大公约数,取k=x/y,b=x%y,
    则x=ky+b,如果一个数能够同时整除x和y,则必能同时整除b和y;而能够同时整除b和y的数也必能同时整除x和y,
    即x和y的公约数与b和y的公约数是相同的,其最大公约数也是相同的,则有f(x,y)=f(y,x%y)(y>0),
    如此便可把原问题转化为求两个更小数的最大公约数,直到其中一个数为0,
    剩下的另外一个数就是两者最大的公约数。*/
        remain = num1 % num2;
        num1 = num2;
        num2 = remain;
    }
    printf("%d\n",maxComMul / num1);
}
int main()
{
    int n,m;
    scanf("%d%d",&n,&m);
    while(0 < n && 0 < m)//m,n有一个为非正数时结束
    {
        //if()
        getLowsetComMul(n,m);
        scanf("%d%d",&n,&m);
    }
    return 0;
}
posted @ 2021-09-22 21:37  叶梓渔  阅读(373)  评论(0)    收藏  举报