#P8909. [RC-06] Multiples

[RC-06] Multiples

题目描述

给出 nn,以及一个长度为 nn 的数组 aa,a1∼ana_1\sim a_n 都是正整数,且 aia_i 在 [1,109][1,10^9] 均匀随机生成。

对每个 0≤k≤n0\le k\le n 计算 [1,m][1,m] 中有几个正整数 xx 恰好是 kk 个 aia_i 的倍数(也就是恰好存在 kk 个 1≤i≤n1\le i\le n,ai∣xa_i\mid x)。

输入格式

第一行两个正整数 n,mn,m。

接下来一行 nn 个正整数 a1∼ana_1\sim a_n。

输出格式

输出一行 n+1n+1 个整数,第 ii 个是 k=i−1k=i-1 的答案。

5 1000000
1 2 3 4 5
0 266666 333335 266665 116668 16666

提示

本题没有部分分,只有 AC 才能得分。

所有数据均满足:1≤n≤25001\le n\le 2500,1≤m≤1091\le m\le 10^9,1≤ai≤1091\le a_i\le 10^9,且 aia_i 在 [1,109][1,10^9] 中均匀随机生成。

本题有 66 组数据满足 n=2500n=2500,22 组数据满足 n≤10n\le 10,共 88 组数据。

所有数据都是如下方式生成:运行以下伪代码恰好一次生成,将其输出作为你的输入。

function rnd(int l,int r):

return [l,r] 之内的随机整数

function main():

输入本组数据的 n,m
输出 n,m
输出 n 个正整数,都是 rnd(1,10^9) 的返回值

如果你不理解上面的生成方式,也可以阅读对应的 C++ 代码:

#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<<' ';
}

样例不满足 aia_i 在 [1,109][1,10^9] 均匀随机生成,因此样例不是合法的输入数据。测试数据中不包含样例。