【NC16610】Hankson的趣味题

题目

Hankson的趣味题

枚举,最大公约数,最小公倍数

思路

根据题意,可以获得以下信息:

  1. a 0 ≠ a 1 a_0\not = a_1 a0=a1 时, x x x a 0 a_0 a0 的倍数但不是 a 1 a_1 a1 的倍数
  2. b 0 ≠ b 1 b_0\not = b_1 b0=b1 时, x x x b 1 b_1 b1 的约数但不是 b 0 b_0 b0 的约数

在上面的信息,有一条值得注意的信息: x x x b 1 b_1 b1 的约数,这就是切入此题的关键

枚举所有 b 1 b_1 b1 的约数,然后判断其是否与 a 0 a_0 a0 的最大公约数是 a 1 a_1 a1,判断其是否与 b 0 b_0 b0 的最小公倍数是 b 1 b_1 b1

由于此题的数据最大为 1 0 9 10^9 109 数量级的,枚举其所有约数使用朴素的 O ( n ) O(\sqrt n) O(n ) 的算法时间复杂度是 1 0 4.5 10^{4.5} 104.5 级别,在外面再套一个 1 0 3 10^3 103 级别的组数,总时间是 1 0 7.5 10^{7.5} 107.5 级别的,是可以过的(一般以 1 0 8 10^8 108 作为能不能过的评判标准)。

代码

#include <stdio.h>

int gcd(int m, int n) {
    int t = 0;
    while (n) {
        t = m % n;
        m = n;
        n = t;
    }
    return m;
}

int lcm(int m, int n) { return m / gcd(m, n) * n; }

int main(void) {
    int t = 0, a0 = 0, a1 = 0, b0 = 0, b1 = 0;
    scanf("%d", &t);
    int ans = 0, i = 0;
    while (t--) {
        scanf("%d%d%d%d", &a0, &a1, &b0, &b1);
        ans = 0;
        for (i = 1; i * i <= b1; i++) {
        	// 枚举 b1 的所有约数
            if (b1 % i == 0) {
            	// 判断约数是否满足题目条件
                if (gcd(i, a0) == a1 && lcm(i, b0) == b1) ans++;
                if (b1 / i == i) {
                	// 此时已经是枚举的最后一个数了,直接退出也无妨
                    break;
                }
                if (gcd(b1 / i, a0) == a1 && lcm(b1 / i, b0) == b1) ans++;
            }
        }
        printf("%d\n", ans);
    }
    return 0;
}

相关推荐

  1. NC16610Hankson趣味

    2024-03-23 15:08:03       41 阅读
  2. NC16619】传球游戏

    2024-03-23 15:08:03       28 阅读
  3. 趣味学算法】07_爱因斯坦数学

    2024-03-23 15:08:03       39 阅读
  4. 力扣1610.可见点最大数目

    2024-03-23 15:08:03       27 阅读
  5. NC19989】容易(EASY)

    2024-03-23 15:08:03       32 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-23 15:08:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-23 15:08:03       100 阅读
  3. 在Django里面运行非项目文件

    2024-03-23 15:08:03       82 阅读
  4. Python语言-面向对象

    2024-03-23 15:08:03       91 阅读

热门阅读

  1. 富格林:拆穿黑幕套路维护资金安全

    2024-03-23 15:08:03       44 阅读
  2. zynq Lwip学习笔记-recv_callback函数

    2024-03-23 15:08:03       41 阅读
  3. 大数据的实时计算和离线计算你理解吗?

    2024-03-23 15:08:03       39 阅读
  4. 应用日志集成到ElasticSearch

    2024-03-23 15:08:03       37 阅读
  5. 防火墙(讲解)

    2024-03-23 15:08:03       42 阅读
  6. 设计模式: 外观模式

    2024-03-23 15:08:03       42 阅读
  7. 网络通信过程中为什么需要连接池?

    2024-03-23 15:08:03       38 阅读
  8. Vue-live2d在项目中展示Live2D 模型

    2024-03-23 15:08:03       42 阅读
  9. odoo字段访问控制

    2024-03-23 15:08:03       39 阅读
  10. VUE父子组件的传参问题

    2024-03-23 15:08:03       44 阅读
  11. 5 数据分析——matplotlib

    2024-03-23 15:08:03       36 阅读
  12. 【Qt5】QVariant

    2024-03-23 15:08:03       36 阅读
  13. 渔夫码头密语: 记录使用 Docker 安装 Wordpress

    2024-03-23 15:08:03       45 阅读