这题看起来很毒瘤,然而也确实很毒瘤……
设答案为 fK(N)。
考虑证明对于任意的 K,fK 都是积性函数。
首先,有 fK(N)=∑d|NfK−1(d)。
即 fK=fK−1∗1。
易证两个积性函数的狄利克雷卷积仍然是积性函数,这里略过。
于是根据 f0=1∗1,证毕。
现在考虑 fK 的值。
由于 fK 是积性函数,设 N 的质因子分解形式为 m∏i=1pici,fK(N)=m∏i=1fK(pici)。
考虑 p 为素数时 fK(pc) 的值。
显然有 f0(pc)=c+1。
假设把 c 个 p 排成一横排,在其中插一个板(两头都可以插),这个板之前的 p 乘起来就是 pc 的一个约数。
所以 f0(pc)=(c+11)。
我们猜测 f1(pc)=(c+22)。
相当于先插一个板,然后对这个板之前的这个因子求 f0 的值,所以相当于插两个板。
所以 fK(pc)=(c+K+1K+1)=(c+K+1c)。
由于 c 最多只有 59,所以二项式系数可以直接暴力计算。
质因子分解时,必须先用筛法筛出较小的素数然后试除,然后对剩下的数使用 Pollard-Rho,因为这是一个随机算法。
注意快速乘。
代码:
1 |
|