欢迎光临散文网 会员登陆 & 注册

CF Round #868 (Div.2) C. Strongly Composite (贪心 + 构造 + 质因数分解)

2023-05-21 11:33 作者:StepfenShawn  | 我要投稿


题意:给定一个数组a,构造一个数组b,数组b尽可能长,且数组b里全是强合数,并且a数组所有数相乘等于b数组所有数相乘;并且 b 的长度要尽可能大

强合数:如果一个数的质因子的个数小于等于合数的个数,那么这个数就是强合数。

思路: 我们要让数组b的乘积对于数组a的乘积, 因此我们可以对数组 a 里面的每一个数进行质因数分解.

在此之前, 我们先"手玩"一下题目中的强合数, 看看强合数满足什么性质:

假设 x 是一个任意整数, 我们可以对其进行质因子分解:

x%20%3D%20p_%7B1%7D%5E%20a%20%20*p_%7B2%7D%5Eb%20...%20*%20p_%7Bi%7D%20%5E%20n

假设所有因子的个数为 D,,第 i 个质因数的幂为 di,  那么根据排列组合有:

D%20%3D%20%5Cprod_%7Bi%3D1%7D%5En(d_%7Bi%7D%20%2B%201)%20

假设所有因子中有 m 个质数, 那么合数为 D - m - 1, 根据强合数的定义 m 要满足一下条件:

m%20%5Cleq%20%20D%20-%20m%20-%201

也就是说:

2m%20%2B%201%20%5Cleq%20D

对于每一个 di,我们知道 d_%7Bi%7D%20%5Cge%201, 那么 D%20%5Cge%202%20%5E%20m, 因此我们可以得到一个更强的条件:

2m%2B1%5Cle2%5Em

显然当 m = 3, 4, ..., 时都是成立的。

当 m = 1 时, 如果要满足强合数, 那么 d1 >= 2

当 m = 2 时, 如果要满足强合数, 那么 max(d1, d2) >= 2

当 m = 3, 4, ... 时, 我们一定能构造出强合数

我们要让数组 b 尽可能大, 对于 m = 2 时包含了 m = 1 时的条件, 所以我们肯定不会选择 m = 2 (因为可以使用更少的质因子), 而选择 m = 3, 因此贪心的策略是:

先找出所有两个相同的质因子并构造出一个强合数。找完后剩余的就找出 3 个不同的质因数构造出一个强合数。其余的质因子和合数可以放到前面构造的组里不影响答案。




CF Round #868 (Div.2) C. Strongly Composite (贪心 + 构造 + 质因数分解)的评论 (共 条)

分享到微博请遵守国家法律