C语言 公约数辗转相除法

main() { int num1,num2,temp; int a=0,b=0; //用int a,b;不太好,没有初始化。 printf("请输入两个数:"); scanf("%d%d",&num1,&num2); if(num1<num2) //保证了后面a的数比b大 { temp=num1; num1=num2; num2=temp; } a=num1; b=num2; while(b!=0) { temp=a%b; a=b; b=temp;//使用了辗转相除法 } printf("最大公约数是:%d\n",a); prinft("最小公倍数是:%d\n",num1*num2/a); } 我运行了好几遍 不过就是看不明白 辗转相除法是怎么使公约数得出来 谁能解释下呢

第1个回答  2020-07-15
如果两个数有最大公约数A,那么这两个数,以及这两个数的差,还有大数除以小数的余数,必然都是A的倍数。
所以当最后两个数刚好能整除时,较小的数就是最大公约数。
建议你单步调试
深刻理解。。
下面是更加具体的:
对于两个数,我们要求是正整数,我们一般用辗转相除法两个数的最大公约数,下面我来仔细讲讲辗转相除法两个数的最大公约数的原理.
我们假设这两个数分别是X,Y,他们最大的公约数为M,则有X=a*M,Y=b*M(a,b是互质的数),很明显,我们的目的就是要把M的系数降到一,为此我们进行X%Y运算,实际上X%Y=(a%b)*M,由于a%b小于b,所以M的系数将会减小,接着我们进行Y%((a%b)*M)=(b%(a%b))*M,同理,则有b%(a%b)<(a%b),可见随着这样取余的操作M的系数会越来越小,前面已经说过,我们的目标是使M的系数降到一,而一是任何整数的约数,换句话说任何整数除一取余后为0,所以当取余之后的数为0,也就意味着M之前的系数为1,此时的被除数就是最大公约数,
举个例子
24

15
24=8*3
15=5*3
24%15=(8%5)*3=3*3=9;
15%9=(5%3)*3=2*3=6
9%6=(3%2)*3=3
6%3=(2%1)*3=0
-------------------------------被除数3就是24与5的最大公约数
两个正整数的最大公约数求出来之后他们的最小公倍数也就知道了,最小公倍数=两个数相乘除以他们的最大公约数,
原理很简单,不加详述.

C++中,求最大公约数的代码如下
int
gys(int
a,int
b)
//a必须要大于b
{
int
r=a%b;
while(r!=0)
{
a=b;
b=r;
r=a%b;
}
return
b;
}
求最小公倍数的代码很简单,如下
int
gbs(int
a,int
b)//a必须要大于b
{
return
a*b/gys(a,b);
}
好了,有错误之处还请指正

求最大公约数c语言
c语言求最大公约数有辗转相除法、更相减损术、穷举法三种。辗转相除法。算法简介:将两个数a,b相除,如果余数c不等于0,就把b的值给a,c的值给b,直到c等于0,此时最大公约数就是b。更相减损术。算法简介:将两个数中较大的数a减去较小的数b,如果差c等于0,那么最大公约数为b,如果不等...

c语言辗转相除法求最大公约数和最小公倍数
c语言辗转相除法求最大公约数和最小公倍数的方法如下:一、算法思想 利用格式输入语句将输入的两个数分别赋给a和b,然后判断a和b的关系,如果a小于b,则利用中间变量t将其互换。再利用辗转相除法求出最大公约数,进而求出最小公倍数。最后用格式输出语句将其输出。二、名词解释 1、最小公倍数:...

c语言求最大公约数
因为连续不断的除法实际上就是不断地将两个数调整到它们的最大公约数,直到其中一个数变为零为止。这个过程就是辗转相除法的核心思想。2.实现算法:在C语言中,我们可以用一个循环来实现这个算法。初始化一个变量result为较小的数n,然后在循环中不断用较大的数m去除以result,更新余数为新的除法结...

c语言编程,利用辗转相除法求公约数
辗转相除法, 又名欧几里德算法(Euclidean algorithm)乃求两个正整数之最大公因子的算法。其原理如下:设两数为a、b(b1),则m=kn+xd=kyd+xd=(ky+x)d,则a=mc=(ky+x)dc,b=

求最大公约数的简便方法
1、辗转相除法(欧几里德法)C语言中用于计算两个正整数a,b的最大公约数,采用函数嵌套调用形式进行求两个数的最大公约数。其算法过程为:前提:设两数为a,b设其中a做被除数,b做除数,temp为余数;Steps:大数放a中,小数放b中;求a\/b的余数;若temp=0则b为最大公约数。如果temp!=0则把...

辗转相除法求最大公约数c语言代码
辗转相除法求最大公约数c语言代码主要功能是通过辗转相除法求出输入的两个整数的最大公约数。以下是代码的详细解释:1、定义了一个名为gcd的函数,它接受两个整数参数a和 b。这个函数将用辗转相除法计算a和 b的最大公约数。2、在函数体中,首先检查b是否为0。如果是,那么最大公约数就是a。这是...

c语言最小公倍数和最大公约数
c语言最小公倍数和最大公约数:可以使用欧几里得算法(辗转相除法)来计算两个数的最大公约数(GCD),然后使用最大公约数来计算最小公倍数(LCM)。用于计算最大公约数和最小公倍数。其中,gcd()函数使用辗转相除法递归计算最大公约数,而lcm()函数则利用最大公约数计算最小公倍数。在main(...

C语言 辗转相除法求最大公约数和最小公倍数
1、明确具体逻辑关系,画出程序流程图(当然,若头脑中有此关系,也可不画)。2、在vc6软件中新建工程,在工程下新建文件,不赘述。3、接下来就可以编码喽!按照流程图一步一步来。当然,源代码不止一种,你喜欢就好。includestdio.h main(){ int m,n,a,b,t,temp,h;printf(输入m和nn);sca...

C语言编程如何实现求两个整数的最大公约数?
在C语言中,可以使用欧几里得算法(辗转相除法)来求解两个整数的最大公约数(GCD)。该算法的基本思想是:用较大的数除以较小的数,将得到的余数作为新的被除数,原来的除数作为新的除数,继续进行相同的操作,直到余数为0,此时最后的除数就是最大公约数。以下是C语言实现求两个整数的最大公约数的...

C语言程序设计如何求最大公约数
最大公约数算法:(1)辗转相除法 两整数a和b:① a%b得余数c ② 若c=0,则b即为两数的最大公约数,结束 ③ 若c≠0,则a=b,b=c,再回去执行① (2)相减法 两整数a和b:① 若a>b,则a=a-b ② 若a

相似回答
大家正在搜