原题链接:[编程入门]最大公约数与最小公倍数
解题思路:
一个定理:最大公约数和最小公倍数的乘积就是原来两个数的乘积,因此先计算出简单的最小公倍数,再利用定理就可以得到最小公倍数
本题也包含一般做法,即如何正确的求出最大公约数
注意事项:
①变量名称尽量代表实际意义,编程时要养成这样的好习惯。gcd是最大公约数(greatest common divisor),lcm是最小公倍数(least common multiple)
algorithm意为“算法”
②使用函数需要先在主函数中声明,在外部进行定义。
参考代码:
①简单方法:
#includeint main() { int a,b,gcd,lcm; scanf("%d %d",&a,&b); for(lcm=1;;lcm++){//使用for循环,思想是让最小公倍数从1开始循环,直到能够同时整除a和b为止 if(lcm%a==0&&lcm%b==0){ break;//此时跳出循环 } } gcd=a*b/lcm;//根据定理很容易得到最大公约数 printf("%d %d",gcd,lcm); return 0; }
②进阶方法:函数
要求到最大公约数,需要用到短除法:将原来的a和b相除(此时a必须是较大的一个值),b再除以得到的余数,如此递归,最后返回当余数为0时的除数,这个除数就是最大公约数
用4和6来验证:
6%4=2
4%2=0(此时除数为0,2即是4和6的最大公约数)
也可以用较大的两个数进行验证
#includeint main() { int a,b,gcd,lcm; scanf("%d %d",&a,&b); int algorithm(int x,int y);//决定使用一种较为官方的算法,使用函数进行,先看它的定义 int x,y; x=a>b?a:b;//这两句是实现短除法的前提条件,即保证x>y y=a>b?b:a; gcd=algorithm(x,y);//调用求最大公约数的算法并把结果给gcd lcm=a*b/gcd;//定理求最小公倍数 printf("%d %d",gcd,lcm); return 0; } int algorithm(int x,int y){ if(x%y!=0) { int c=x%y;//定义一个变量来存放新的除数 algorithm(y,c);//递归,即y对c取余 } else return y;//此时x对y取余余数为0,返回除数y }
一定要多多上手实践哦!
0.0分
1 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复