您的位置:首页 > 编程语言 > C语言/C++

C语言求两个数中最大公约数

2015-09-30 23:25 387 查看
在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;
}
最小公倍数求法:要求的两个数相乘除以最大公约数就是两个数的最小公倍数。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息