题目链接:https://ac.nowcoder.com/acm/problem/213276

到主站看:https://blog.csdn.net/weixin_43346722/article/details/109631420

题目

牛牛现在有 个数分别是 ,牛牛特别喜欢数三元组,如果三个数 满足 的倍数, 的倍数,那么牛牛就觉得这三个数形成的三元组是有趣的。

现在给定 的大小,牛牛想知道有多少个三元组 是有趣的。

输入

一行一个整数 表示牛牛现在有 这些数。

输出

一个整数表示牛牛觉得有趣的三元组的个数。

样例输入

10

样例输出

9

数据范围

对于 的数据,
对于 的数据,
对于 的数据,

思路

这道题其实就是一道模拟。

其实我们就是要 而且
为正整数)

那我们可以先普通枚举 ,然后直接从 开始枚举 的倍数作为 ,然后再从 开始枚举 的倍数作为
那每一次枚举出来的 就是一对合法的三元组。

我是用三重循环扫过去,一次一次加的,很明显其实可以优化。
但是也可以过,我就懒得优化了。

代码

#include<cstdio>
#define ll long long

using namespace std;

int n;
ll ans;

int main() {
    scanf("%d", &n);

    for (int i = 1; i <= n / 4; i++)//枚举 a
        for (int j = i + i; j <= n / 2; j += i)//对于当前的 a 枚举合法的 b
            for (int k = j + j; k <= n; k += j)//对于当前的 b 枚举合法的 c
                ans++;

    printf("%lld", ans);

    return 0;
}