在C语言中如何求两个数的最大公约数呢?下面用三种方法进行求解。

方法一:穷举法。

    先比较两个数的大小,然后找出较小数t,最后判断t为何值时两个数都能整除,此方法效率较低。

代码如下:

#include<stdio.h>
int main()
{
     int num1,num2,temp,i;
     scanf("%d%d",&num1,&num2);
     if(num1>num2)
     {
           temp=num1;
           num1=num2;
           num2=temp;
      }/*将较小值赋给num1*/
     for(i=num1;i>0;i--)
     {
           if(num1%i==0&&num2%i==0)/*两个数都被i整除时即为最大公约数*/
           printf("%d ",i);
      }
return 0;
}

方法二:辗转相减法。

    辗转相减法是用较大数减去较小数,再比较减数和差的大小,用较大数减去较小数,如此不断循环,直到两数相减为0停止,则最大公约数就求出来了。

代码如下:

#include<stdio.h>
int main()
{
      int a,b;
      scanf("%d%d",&a,&b);
      while(a!=b)
      {
          if(a>b)a=a-b;/*比较两数大小,大数减小数差并赋给a*/
          else b=b-a;
       }
      printf("%d",b);
return 0;
}

方法三:辗转相除法。

辗转相除法求两个数的最大公约数的步骤如下:

                   先用小的一个数除大的一个数,得第一个余数;

                  再用第一个余数除小的一个数,得第二个余数;

                  又用第二个余数除第一个余数,得第三个余数;
        这样逐次用后一个数去除前一个余数,直到余数是0为止.那么,最后一个除数就是所求的最大公约数(如果最后的除数是1,那么原来的两个数是互质数。)

代码如下:

#include<stdio.h>
int main()
{
      int num1,num2,temp;
      scanf("%d%d",&num1,&num2);
      /*不需要判断两个数的大小,当num1<num2时,在经过一次运算后,两个数自动进行交换。*/
      while(num2)
      {
            temp=num1%num2;/*辗转相除求最大公约数*/
            num1=num2;
            num2=temp;
       }
       printf("%d",num1);
return 0;
}

最小公倍数求法:要求的两个数相乘除以最大公约数就是两个数的最小公倍数。