P8909 [RC-06] Multiples 题解
思路
因为 \(a_i\) 在 \(1 \sim 10^9\) 均匀随机生成,所以可以考虑枚举 \(a_i\) 的倍数,用 \(map\) 记录每个数被枚举的次数。
代码如下
#include <bits/stdc++.h>
// #define int long long
#define rep(i, l, r) for(int i = l; i <= r; ++ i)
using namespace std;
const int MAXN = 2510;
map <int, int> mp;
int n, m, x;
int ans[MAXN];
main()
{
cin >> n >> m;
ans[0] = m;
rep(i, 1, n)
{
cin >> x;
for(int j = x; j <= m; j += x)
++ mp[j];
}
for(auto i = mp.begin(); i != mp.end(); ++ i)
{
++ ans[i->second];
-- ans[0];
}
rep(i, 0, n)
cout << ans[i] << " ";
return 0;
}