本系列博客为个人刷题思路分享,有需要借鉴即可。
1.题目链接:
无
2.详解思路:
题目描述:输入两个正整数,输出其最大公因数和最小公倍数
一般方法:最大公因数:穷加法;最小公倍数:穷举法。
巧妙方法:最大公因数:辗转相除法;最小公倍数:数学公式。
下面是一般方法的代码示例:
#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> int main() { int a = 0; int b = 0; int GreComDiv = 0; scanf("%d %d", &a, &b); int min = a < b ? a : b; int i = 0; //最大公约数——穷加法 for (i = 1; i <= min; i++) { if (a % i == 0 && b % i == 0) GreComDiv = i; } int lcm = 0; int max = a > b ? a : b; //最小公倍数——穷乘法 for (i = 1;; i++) { if (((i * max) % a == 0) && ((i * max) % b == 0)) { lcm = i * max; break; } } printf("最大公约数为%d 最小公倍数为%d\n", GreComDiv, lcm); return 0; }
下面是比较巧妙的方法代码示例:
int main() { int a = 0; int b = 0; scanf("%d %d", &a, &b); int c = a; int d = b; while (a && b) { if (a > b) a %= b; else b %= a; } int max = a > b ? a : b;//最大公因数 int min = c * d / max;//最小公倍数 printf("最大公约数为%d 最小公倍数为%d\n", max, min); return 0; }
具体为什么可以这样搞,可以去B站搜一下辗转相除法相关视频自己看一下。
完。