[RC-06] Multiples
题目描述
给出 $n$,以及一个长度为 $n$ 的数组 $a$,$a_1\sim a_n$ 都是正整数,且 $a_i$ 在 $[1,10^9]$ 均匀随机生成。
对每个 $0\le k\le n$ 计算 $[1,m]$ 中有几个正整数 $x$ 恰好是 $k$ 个 $a_i$ 的倍数(也就是恰好存在 $k$ 个 $1\le i\le n$,$a_i\mid x$)。
输入输出格式
输入格式
第一行两个正整数 $n,m$。
接下来一行 $n$ 个正整数 $a_1\sim a_n$。
输出格式
输出一行 $n+1$ 个整数,第 $i$ 个是 $k=i-1$ 的答案。
输入输出样例
输入样例 #1
5 1000000
1 2 3 4 5
输出样例 #1
0 266666 333335 266665 116668 16666
说明
本题没有部分分,只有 AC 才能得分。
所有数据均满足:$1\le n\le 2500$,$1\le m\le 10^9$,$1\le a_i\le 10^9$,且 $a_i$ 在 $[1,10^9]$ 中均匀随机生成。
**本题有 $6$ 组数据满足 $n=2500$,$2$ 组数据满足 $n\le 10$,共 $8$ 组数据。**
**所有数据都是如下方式生成:运行以下伪代码恰好一次生成,将其输出作为你的输入。**
```
function rnd(int l,int r):
return [l,r] 之内的随机整数
function main():
输入本组数据的 n,m
输出 n,m
输出 n 个正整数,都是 rnd(1,10^9) 的返回值
```
如果你不理解上面的生成方式,也可以阅读对应的 C++ 代码:
```cpp
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main(){
freopen("in.txt","w",stdout);
int n,m;
cin>>n>>m;
cout<<n<<' '<<m<<'\n';
mt19937_64 rng(time(0));
const int M=1e9;
for(int i=1;i<=n;i++)cout<<rng()%M+1<<' ';
}
```
样例不满足 $a_i$ 在 $[1,10^9]$ 均匀随机生成,因此样例不是合法的输入数据。测试数据中不包含样例。