C语言程序 设计:用辗转相除法求两个正整数的最大公约数

来源:百度知道 编辑:UC知道 时间:2024/05/28 02:21:41
编写程序

main()
{
int a,b,num1,num2,temp;
printf("please input two numbers:\n");
scanf("%d,%d",&num1,&num2);
if(num1<num2)/*交换两个数,使大数放在num1上*/
{ temp=num1;
num1=num2;
num2=temp;
}
a=num1;b=num2;
while(b!=0)/*利用辗除法,直到b为0为止*/
{
temp=a%b;
a=b;
b=temp;
}
printf("gongyueshu:%d\n",a);
printf("gongbeishu:%d\n",num1*num2/a);
}

我发现C中这个算法最乱了。现在一般都用这个算法。a,b.假如a比较小,那么从a到1不断地做减法,知道满足某个数能整除a,b.
int GetCommonDivisor(int a, int b)
{
int i,temp=a<b?a:b;
for(i=temp;i>0;i--)
if(a%i==0&&b%i==0)
break;
return i;

}

这个满足公约数的意义,理解起来简单。

#include"stdio.h"
main()
{
int m,n,t;
printf("m,m=");
scanf("%d%d",&m,&n);
while(n) /*当n不为0时进行循环*/
{t=m%n
m=n;
n=t;
}