题目化简
根据C形阵的性质推出和。
可以将所有6个变量(恒成立,不把看作变量)用表示:
从这个式子中也能发现是对称关系,从图中也可以看出。
由于所有变量都是整数,还有三个约束为:能被(和)整除,能被整除。
对于op==0的情况,需要枚举每个(从1到n),找出满足条件的,并计算的累加和即可;对于op==1的情况,要求至少有6个不同的数就是要求除外的数都互不相同。
记给定时所有的总和为,这是op==0时的答案;记互不相同时所有的和为,这是op==1时的答案。
完美C形阵的特点
组合问题计数,用容斥原理尝试分析。列出有变量重复的情况,先考虑两两重复(如,再考虑多个变量相等(如)。
两两相等有种情况。由于变量之间并非独立(有(1)的约束),所以这些情况一定有等价的情形。把这些等价情形都转换为之间的关系:
| 化简后的关系 | 对应的原始等式(两两相等) |
|---|---|
或许根据这个系统的原本的约束数量,就能够计算出这15种情况一定会归为这6种可能(而不需要枚举)。或许需要代数学的知识。另外,约束(1)是齐次的,可能帮助推导。
这样,两个变量相等的所有情况被我们化简为上面的6种,这六种情况分别记作,构成集合。设是第种情况下的的和,是第两种情况同时发生时的的和。
根据容斥原理,
下面考虑多个变量(至少3个)都相等的情况。令上面两两相等的6种情况中至少两个等式同时成立,发现:全部都会得到,即全部变量都由决定(只有一个自由度),此时,(价值与大小相等)。
这说明减去上面的六种情况时(对应式2的项),这个唯一解被我们减去了6次,我们应该只减掉它一次,所以需要加回5次这个情况的值(即),共需要加。
也可以继续用式2的形式化方式计算。但按照容斥原理思想做更简单。
由于和的对称性,。式2化简为
计算优化
积性函数
求解 和 的关键在于分析其函数性质。由于题目的约束条件全部基于整除关系,这天然契合算术基本定理。
设 的唯一分解为 。
条件 、 及 等价于对 和 的质因子分解 , 中每个质因子 的指数提出独立的不等式约束:
这说明不同质因子之间的约束是完全独立的。同时,对应的贡献 也是按质因子连乘的。
因此,总和 满足乘法分配律,即对于任意互质的正整数 ,有 。同理,各部分交集的和 也是积性函数。
既然是积性函数,我们只需推导 (即单一质数次幂)时的通项公式即可。
当 时,令 ,,此时 。令 。
对于 :
枚举 的值,统计有多少对 满足约束。
- 当 时,,共 对;
- 当 时,,共 对。
对于 (满足 ):
此时 。代入约束得 ,此时 。
对于 (满足 ):
此时 。代入约束得 ,此时 。
对于 (满足 ):
此时 ,即 。代入得 为常数。满足条件的 有 对。
对于 (满足 ):
此时 。由于 ,解得 。此时 。
欧拉线性筛
在明确了积性函数的局部公式后,可以利用欧拉线性筛(Euler Sieve)在 时间内预处理出所有 的 和 。
算法流程如下:
- 维护一个数组
low[i],记录 的最小质因子的纯次幂部分(如 时,low[12] = 4)。 - 在筛过程中,遇到质数 时,直接代入 计算 和 。
- 当枚举到合数 时( 是 的最小质因子):
- 若 : 与 互质,直接由积性函数性质得到 ,
low更新为low[i * p] = p。 - 若 : 此时 是 的因子。更新
low[i * p] = low[i] * p。- 若
low[i * p] == i * p,说明 整体是某个质数 的纯次幂 ,此时暴力调用上面推导的公式进行 计算。 - 若
low[i * p] != i * p,说明 可以拆分为互质的两部分:low[i * p]和(i * p) / low[i * p]。再次利用积性函数性质相乘得出结果。
- 若
- 若 : 与 互质,直接由积性函数性质得到 ,
通过该优化,空间复杂度为 ,时间复杂度由于所有公式的累加计算均落在质数纯次幂点上,整体复杂度严格为 ,完全可以在时限内通过 的数据规模。最后基于计算出的数组,对于给定的 op,应用前文对应的求和/容斥公式即可输出答案。