本文主要是介绍C语言例题——输入两个正整数m和n,求其最大公约数和最小公倍数。,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
#include "stdio.h"void main() {//接收输入的两个数中的较大值和较小值int max, min;//用于for循环int i;//接收输入的两个数int m, n;//a接收最大公约数 b接收最小公倍数int a, b;printf("请输入两个正整数:");scanf("%d%d", &m, &n);//判断两个数的大小关系max = m > n ? m : n;min = m > n ? n : m;//如果输入的两个数是倍数关系,那么较大值为两者的最小公倍数,较小值为两者最大公约数if (max % min == 0) {a = min;b = max;printf("%d和%d的最大公约数是%d,最小公倍数是%d", max, min, a, b);} else {//如果不成倍数关系//求最大公约数 从2开始遍历到 min/2 //默认最大公约数是1a = 1;for (i = 2; i <= min/2; i++) {if (max % i == 0 && min % i == 0) {a = i;}}//求最小公倍数 从max开始遍历到 max*min//默认最小公倍数是两者的较大值b = max;for (i = max; i <= max * min; i++) {if (i % max == 0 && i % min == 0) {b = i;//找到最小公倍数后结束循环break;}}printf("%d和%d的最大公约数是%d,最小公倍数是%d", max, min, a, b);}}
辗转相除法求最大公约数:
辗转相除法, 又名欧几里得算法(Euclidean algorithm),目的是求出两个正整数的最大公约数。它是已知最古老的算法, 其可追溯至公元前300年前。 这条算法基于一个定理:两个正整数a和b(a>b),它们的最大公约数等于a除以b的余数c和b之间的最大公约数。比如10和25,25除以10商2余5,那么10和25的最大公约数,等同于10和5的最大公约数。
#include "stdio.h"
void main()
{int m,n;int r; printf("请输入两个数:");scanf("%d%d",&m,&n);//r是余数r=m%n;while(r){ m=n;n=r;r=m%n;} printf("这两个数的最大公约数是:%d",n);
}
初学C语言,如有错误,还望指正,因考试需要,代码运行环境为:
不同编译器和不同版本C语言代码略有不同。
这篇关于C语言例题——输入两个正整数m和n,求其最大公约数和最小公倍数。的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!