【以下回答由 GPT 生成】
对于洛谷p1029公约数公倍数问题,为了缩小if条件的限制范围,只计算满足条件的数字,可以采用以下解决方案:
gcd
和lcm
来保存最大公约数和最小公倍数。a > b ? a : b
来判断。%
运算符判断是否能同时整除两个数,如果能整除,则更新最大公约数和最小公倍数。lcm = a * b / gcd
来计算。gcd
和最小公倍数lcm
。以下是具体的C语言代码:
#include <stdio.h>
// 定义函数来计算最大公约数
int getGCD(int a, int b) {
if (b == 0) {
return a;
}
return getGCD(b, a % b);
}
int main() {
int a, b;
// 输入两个数
scanf("%d%d", &a, &b);
// 找到两个数中较大的数作为循环上限
int limit = a > b ? a : b;
int gcd = 1;
int lcm = a * b;
// 循环判断是否同时整除两个数
for (int i = 1; i <= limit; i++) {
if (a % i == 0 && b % i == 0) {
gcd = i;
}
}
// 计算最小公倍数
lcm = a * b / gcd;
// 输出最大公约数和最小公倍数
printf("%d %d\n", gcd, lcm);
return 0;
}
这样,通过缩小if条件的限制范围,只有满足条件的数字会被计算在内。
【相关推荐】