if语句块中只有一个交换两个变量值的部分,为何能实现求最小公倍数的功能

C语言求最小公倍数
编写代码如下:

#include 
#include 

int main()
{
    int p,r,n,m,temp;
    printf("请输入两个正整数n,m:");
    scanf("%d,%d",&m,&n);
    if(ntemp=n;
        n=m;
        m=temp;
    }
    p=n*m;
    while(m!=0)
    {
        r=n%m;
        n=m;
        m=r;
    }
    printf("它们的最大公约数为:%d\n",n);
    printf("它们的最小公倍数为:%d\n",p/n);
    return 0;
}

上述程序中,if语句块中只有一个交换两个变量值的部分,为何能实现求最小公倍数的功能,这是什么算法?

if只是为了保证n比m大
后面的循环才是算法
这叫辗转相除法
顾名思义,就是除完再除,一直到除尽为止

他这交换与不交换对求p没意义 p=n*m交换后得出的一样,他求的是公倍数吧 这样求出来不一定是最小公倍数