c语言中求俩个数的最大公约数怎么写程序,C语言求两个数中最大公约数

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

方法一:穷举法。

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

代码如下:

#include

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

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

int main()

{

int num1,num2,temp;

scanf("%d%d",&num1,&num2);

/*不需要判断两个数的大小,当num1

while(num2)

{

temp=num1%num2;/*辗转相除求最大公约数*/

num1=num2;

num2=temp;

}

printf("%d",num1);

return 0;

}

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

你可能感兴趣的:(c语言中求俩个数的最大公约数怎么写程序,C语言求两个数中最大公约数)