Uoj#578 【ULR #1】校验码

官方题解见 UOJ Long Round #1 题解,这里介绍一下参赛大佬们提出的更简洁的做法。

题意:给出常数 ,定义积性函数

给出 ,求下列式子的值:

答案对 取模。

多组数据,,时限


记积性函数 ,有

,可以用 反演掉

其中 只需要求出 即可。

可以发现 ,所以所有 都必须满足

则有 由于 ,说明 是一个无平方因子数,且 的素因子在 中的次数都是偶数。因此,有

,则有

可以发现, 是个积性函数( 分别积性,点乘仍然有积性),观察质数幂处的取值:

注意到 只有 倍数处的位置取值值不同,可以计算

  • 时, ,则

  • 时, ,则

  • 时, ,则

如此反复,可归纳证明

则有 :

注意到 有值的位置不多(不足 ),可以暴力搜索出所有有值的位置。

那么问题就变为求出 的块筛(或称基本和组),官方题解中有 的做法。

下面也有一个 的做法,会更简洁一些 :

首先显然有 ,根据 PN 相关理论,可以 求块筛。

具体地,构造 ,则 只在 PN 处有值。

不仅如此,可以证明 只在平方数处有值。

,则

用线性筛求出 内的 函数,然后可以整除分块 计算一个

若要求块筛,和线性筛复杂度平衡一下可以做到