1 条题解
-
0
A. Array Divisibility 详细题解
题目重述
给定 ,要求构造一个长度为 的正整数数组 (每个数 ),使得对于每一个 ,所有下标为 的倍数的元素之和能被 整除。即:
$$\forall k \in [1, n],\quad \sum_{j: k \mid j} a_j \equiv 0 \pmod{k}. $$需要输出任意一个满足条件的数组。
观察与构造
一个极其简单且有效的构造是:
下面证明这个数组满足所有条件。
对于任意固定的 ,所有下标是 的倍数的位置为 ,其中 。这些位置上的元素值恰好是 。它们的和为:
$$S_k = k + 2k + \dots + mk = k \cdot (1 + 2 + \dots + m) = k \cdot \frac{m(m+1)}{2}. $$显然 是 的整数倍,因此 。条件得证。
为什么这样构造可行?
- 每个 都是正数,且 ,而题目要求每个元素 ,显然满足。
- 对于每个 ,求和自动提出因子 ,所以整除性成立。
- 代码实现只需输出 即可。
其他可能的构造
除了 ,还可以取 ( 为任意正整数),或者更一般地,取 ,其中 为任意整数,只要保证每个 的倍数位置上的和仍能被 整除。最简单且满足题目数值上限的就是 。
复杂度分析
对于每个测试用例,输出 个数,时间复杂度 ,空间 。由于 ,,总计算量极小。
示例验证
样例中 ,输出
1 2 3是否满足?- :和 被 整除。
- :下标 的值为 , 被 整除。
- :下标 的值为 , 被 整除。
符合条件。但样例输出为4 22 18,说明有多种答案, 也是正确的。
总结
本题的核心在于发现 的简单构造,利用倍数和的因子提取性质直接满足整除要求。这是 Codeforces 上一道典型的“构造题”,通常考察观察能力,而非复杂算法。
- 1
信息
- ID
- 6915
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者