题目链接: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; }