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