要怎么理解?下面的”辗转相除法”?#include main() {int r,m,n; scanf(“%d%d”,&m,&n); if(m

来源:学生作业帮助网 编辑:作业帮 时间:2024/04/29 07:08:13
要怎么理解?下面的”辗转相除法”?#include    main()  {int r,m,n;   scanf(“%d%d”,&m,&n);   if(m

要怎么理解?下面的”辗转相除法”?#include main() {int r,m,n; scanf(“%d%d”,&m,&n); if(m
要怎么理解?下面的”辗转相除法”?
#include
main()
{int r,m,n;
scanf(“%d%d”,&m,&n);
if(m r=m%n;
while(r){m=n;n=r;r= m%n;}
printf(“%d\n”,n);
}

要怎么理解?下面的”辗转相除法”?#include main() {int r,m,n; scanf(“%d%d”,&m,&n); if(m
这个就是著名的欧几里德算法!
欧几里德算法又称辗转相除法,用于计算两个整数a,b的最大公约数.其计算原理依赖于下面的定理:
定理:gcd(a,b) = gcd(b,a mod b)
证明:a可以表示成a = kb + r,则r = a mod b
假设d是a,b的一个公约数,则有
d|a,d|b,而r = a - kb,因此d|r
因此d是(b,a mod b)的公约数
假设d 是(b,a mod b)的公约数,则
d | b ,d |r ,但是a = kb +r
因此d也是(a,b)的公约数
因此(a,b)和(b,a mod b)的公约数是一样的,其最大公约数也必然相等,得证.
欧几里德算法就是根据这个原理来做的

这个就是著名的欧几里德算法!
欧几里德算法又称辗转相除法,用于计算两个整数a,b的最大公约数。其计算原理依赖于下面的定理: