C语言高手请!!!帮编一个求最大公约数的函数,请写明注释。。怎么办?
"下边的东东是我在网络(互联网)上收集整理并修改而成。呵呵~!把他人的东东学来消化并吸收就是自己的,期望对大家有帮助。~!,第一次传的代码少了有些,目前重新修改了。献给大家。方法(一)更相减损术更相减损术是我国古代数学家求2个正整数最大公约数的算法。 我们以求16,122个数的最大公约数为例加以说明。用两数中较大的数减去较小的数,即16-12=4,用差数4和较小的数12构成一对新数,对这一对数再用大数减小数,以同样的操作一直做下支,直到产生一对相等的数,这个数就是最大公约数:(16,12)→(4,12)→(8,4)→(4,4),4就是最大公约数应用:#include #include m...全部
"下边的东东是我在网络(互联网)上收集整理并修改而成。呵呵~!把他人的东东学来消化并吸收就是自己的,期望对大家有帮助。~!,第一次传的代码少了有些,目前重新修改了。献给大家。方法(一)更相减损术更相减损术是我国古代数学家求2个正整数最大公约数的算法。
我们以求16,122个数的最大公约数为例加以说明。用两数中较大的数减去较小的数,即16-12=4,用差数4和较小的数12构成一对新数,对这一对数再用大数减小数,以同样的操作一直做下支,直到产生一对相等的数,这个数就是最大公约数:(16,12)→(4,12)→(8,4)→(4,4),4就是最大公约数应用:#include #include main(){ int a,b,num1,num2,temp; printf("please input two numbers:
"); scanf("%d,%d",&num1,&num2); if(num1b)?temp:b; b=(temp } printf("zui da gong yue shu:%d
",a); getch();}方法(二)欧几里德算法 欧几里德算法又称辗转相除法,用于计算2个整数a,b的最大公约数。
其计算原理依赖于下边的定理: 定理:gcd(a,b) = gcd(b,a mod b) 证明:a可以表示成a = kb r,则r = a mod b 假设d是a,b的1个公约数,则有 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)的公约数是一样的,其最大公约数也必然相等code:int gcd(int a, int b){ if (b == 0) { return a; } else { return gcd(b, a % b); }}应用:#include "stdio。
h"#include "conio。
h"main(){ int a,b,num1,num2,temp; printf("please input two numbers:
"); scanf("%d,%d",&num1,&num2); if(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
",a); getch();}"。收起