例题:求两个数的最大公约数和最小公倍数
欧几里得算法:辗转求余
原理: gcd(a,b)=gcd(b,a mod b)
当b为0时,两数的最大公约数即为a
注意:
公约数的定义:点击跳转
由定义可知,0不在公约数范围内。所以0和其它数字没有公约数。那0和一个整数的最小公倍数是多少?其实一般是不考虑0的,如果非要考虑,最小公倍数=0。
拓展:三个数的最小公倍数求法是求完两个数的最小公倍数后得出的数再和第三个数求,就是求两次两个数的最小公倍数。
源码:
1 /*欧几里得算法:辗转求余 2 原理: gcd(a,b)=gcd(b,a mod b) 3 当b为0时,两数的最大公约数即为a */ 4 // ------------------------分 隔 符--------------------------- 5 # include<stdio.h> 6 # include<math.h> 7 int main(){ 8 int a,b; 9 printf("请输入两个正整数并用空格隔开:\n"); 10 scanf("%d%d",&a,&b); 11 if(a==0||b==0) 12 printf("输入的数据有误"); 13 else 14 printf("最大公约数为%d,最小公倍数为%d",gcd(a,b),a*b/gcd(a,b)); 15 return 0; 16 } 17 //定义一个函数:最大公约数gcd(a,b) 18 int gcd(a,b){ 19 while(b!=0) //这里while的条件很重要,你不要写成了(a%b)!=0,不然你输入8 2数据的时候,他直接不循环,会直接输出最大公约数为8。 20 {int Q; 21 Q=a%b; 22 a=b; 23 b=Q;} 24 return(a); 25 } 26
作者QQ4577105