洛谷p1029公约数公倍数

img

img


if的条件大了,怎么缩小限制的范围,输入3 60结果有8个,10 18什么的也算进去了。

【以下回答由 GPT 生成】

对于洛谷p1029公约数公倍数问题,为了缩小if条件的限制范围,只计算满足条件的数字,可以采用以下解决方案:

  1. 首先,定义两个变量gcdlcm来保存最大公约数和最小公倍数。
  2. 接下来,需要找到两个数中较大的数来作为循环的上限,可以使用三目运算符a > b ? a : b来判断。
  3. 在循环中,使用%运算符判断是否能同时整除两个数,如果能整除,则更新最大公约数和最小公倍数。
  4. 在计算最小公倍数时,可以使用最大公约数公式lcm = a * b / gcd来计算。
  5. 最后,输出最大公约数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条件的限制范围,只有满足条件的数字会被计算在内。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^