题目链接:https://codeforces.com/contest/1176/problem/D
题意:给你一个$2n$个数的数组$b$,要你求$a$,其中$a$是生成$b$数组的数组。给出生成$b$的规律:
- 如果$a_i$是素数,那么$b$中会有素数表中第$a_i$个素数。
- 如果$a_i$是合数,那么$b$中会有这个数本身以及$a_i$最大的非自己的因数。
要求输出这个$a$数组。
这个题很有意思,我们先考虑如果$a_i$是素数,那么输出的就是第$a_i$个素数,于是我们首先想到的当然是打一个素数表。
再考虑$a_i$是合数的情况,除了输出自己以外还要输出最大的因数。数据规模太大,不过我们注意到:设$x$是$a_i$最小的因数,$y$是最大的因数,那么$a_i=xy$,于是我们还需要额外记录每一个数的最小因数,这样是可以线性筛的。
于是输入$b$数组,统计每个数字出现的次数,按照合数和质数分别依次输出结果即可。
1 |
|