[氧化镍]卷王之王

280 篇文章 1 订阅
220 篇文章 2 订阅

题目

题目描述
在美丽的蓝星上,生活着三种函数: μ ,    I ,    i d k \mu,\;I,\;id_k μ,I,idk 。它们三个都是大家熟知的数论函数,想必我不需要把
{ μ ( p 1 t 1 p 2 t 2 ⋯ p k t k ) = [ max ⁡ ( t i ) ≤ 1 ] ( − 1 ) k I ( n ) = 1 i d k ( n ) = n k    ( k ∈ N + ) \begin{cases} \mu(p_1^{t_1}p_2^{t_2}\cdots p_k^{t_k})=[\max(t_i)\le 1] (-1)^{k}\\ I(n)=1\\ id_k(n)=n^k\;(k\in\N^+) \end{cases} μ(p1t1p2t2pktk)=[max(ti)1](1)kI(n)=1idk(n)=nk(kN+)

这种基础的定义写出来。然而这一天,蓝星上来了一个 p r i n c i p a l \rm principal principal,他带来了卷!当 f , g f,g f,g 卷在一起时,它们会得到
h ( n ) = ∑ d ∣ n f ( d ) ⋅ g ( n d ) h(n)=\sum_{d|n}f(d)\cdot g\left({n\over d}\right) h(n)=dnf(d)g(dn)

卷的威力,恐怖至极!这三种基础函数卷来卷去,卷出了一个新函数 F ( n ) F(n) F(n),长相怪异,谁也不知道它是个啥。别担心!你作为反卷协会的会长,相当清楚他的弱点:质数。你早就证明过,对于任取的某个 c c c,存在一个多项式 G ( x ) G(x) G(x),使得对于任意质数 p p p 都满足 F ( p c ) = G ( p ) F(p^c)=G(p) F(pc)=G(p)

你安插在 p r i n c i p a l \rm principal principal 身边的卧底,代号 l i t t l e    s c i s s o r \rm little\;scissor littlescissor 的,冒着被校长开除的风险,告诉了你一个 c c c 和对应的 G ( p ) G(p) G(p) 。为了不打草惊蛇,你只要说出 F ( p d ) F(p^d) F(pd) 对应的 G ( x ) G(x) G(x) 来警告一下他。可惜的是,数据传输量太大,你得到的信息和输出的结果都必须取模 998244353 998244353 998244353

显然 F ( n ) F(n) F(n) 应该是不超过 1 0 5 10^5 105 个基础函数卷出来的。如果你发现不存在这样的 F ( n ) F(n) F(n),就告诉 l i t t l e    s c i s s o r \rm little\;scissor littlescissor 吧,但是请不要责备他。如果有多个可能的 F ( p d ) F(p^d) F(pd) 对应的 G ( x ) G(x) G(x),请输出最小的一个(取模后比较大小)。多项式 A ( x ) A(x) A(x) 小于 B ( x ) B(x) B(x) 当且仅当 ∣ A ( x ) B ( x ) ∣ |\frac{A(x)}{B(x)}| B(x)A(x) x → + ∞ x\rightarrow +\infty x+ 时收敛于一个小于 1 1 1 的值。

数据范围与提示
1 ≤ d ≤ c ≤ 100 1\le d\le c\le 100 1dc100 G ( x ) G(x) G(x) 的次数 n ∈ [ 0 , 1000 ] n\in[0,1000] n[0,1000]

思路

狄利克雷卷积满足结合律、交换律、分配律。那么 F ( p c ) F(p^c) F(pc) 可以看成把次数 c c c 分配到每个基础函数上面去,然后乘起来。

题目中暗示过的, F ( p c ) F(p^c) F(pc) 总是可以写成 G ( p ) G(p) G(p),其原理就是 μ ( p c ) ∈ { 1 , − 1 , 0 } \mu(p^c)\in\{1,-1,0\} μ(pc){1,1,0},而 i d k ( p c ) = p c k id_k(p^c)=p^{ck} idk(pc)=pck,二者相乘再加上别的肯定是 p p p 的多项式。可以认为 I = i d 0 I=id_0 I=id0

于是,如果把 p c p^c pc 分配出去,得到的最高次项肯定是 c m cm cm,其中 i d m id_m idm 是最大的 i d id id 函数的下标。于是 m = n c m=\frac{n}{c} m=cn 被首先确定(不整除则无解)。

然后 i d m id_m idm 用了多少个呢?假设是 x m x_m xm 个,那么将 c c c 分给 x m x_m xm 个盒子,方案数是 ( c + x m − 1 x m − 1 ) {c+x_m-1\choose x_m-1} (xm1c+xm1),必须是最高次项的系数,因为这是唯一可以得到 c m cm cm 次项的方法。

x m − 1 x_{m-1} xm1 又不会算了。先假设 μ \mu μ 不存在,我们可不可以模仿上面的方法,找到某一项,利用这一项的系数来确定 x m − 1 x_{m-1} xm1 呢?我们必须确保,一旦使用了 i d m − 2 id_{m-2} idm2 或者更小的 i d id id,就不能贡献到这一项了。可以被 i d m − 2 id_{m-2} idm2 或更低的 i d id id 乘出来的,无非就是 1 1 1 分给 m − 2 m-2 m2 c − 1 c-1 c1 分给 m m m 嘛。也就是 m ( c − 1 ) + m − 2 m(c-1)+m-2 m(c1)+m2 嘛。加一就是我们想要的:第 c m − 1 cm-1 cm1 项。

类似的分析,第 ( c − 1 ) m + i (c-1)m+i (c1)m+i 项就可以用来计算 x i x_i xi 。我们只需要求出,不用 i d i id_i idi 时得到的这一项的系数 f f f,那么 x i ⋅ ( c − 1 + x m − 1 x m − 1 ) + f x_i\cdot{c-1+x_m-1\choose x_m-1}+f xi(xm1c1+xm1)+f 就必须是这一项的系数。这里的 x i x_i xi 乘组合数很好理解: x i x_i xi 中选一个,剩下的分配给 x m x_m xm 个盒子。这是关于 x i x_i xi 的线性方程,唯一确定!

那么 f f f 怎么算呢?用一个 d p \tt dp dp 就行了。 f ( i , j , k ) f(i,j,k) f(i,j,k) 表示只用 i d i id_i idi 或者更大的 i d id id,已经从 c c c 中分配了 j j j 出去,贡献到 k k k 次项。这个 d p \tt dp dp 转移很简单,枚举在 i d i − 1 id_{i-1} idi1 上分配的指数,乘一个组合数就转移到 k + ( i − 1 ) × w h a t k+(i-1)\times what k+(i1)×what 了。

这个计算 f f f O ( m c n ⋅ c ) = O ( n 2 c ) \mathcal O(mcn\cdot c)=\mathcal O(n^2c) O(mcnc)=O(n2c) 的。感觉挺大,但是这就是正解,有啥办法呢 😕

那么 μ \mu μ 存在呢?显然 i d 0 id_0 id0 就不存在了,因为二者互为逆元。由于 μ \mu μ i d 0 id_0 id0 是同阶的,都是 p 0 p^0 p0 级别,所以对于前面的过程没有任何差别。只有最后一步,关于 x 0 x_0 x0 的方程中, x 0 x_0 x0 添了一个负号,然后计算 f ( 0 , j , k ) f(0,j,k) f(0,j,k) 时组合数有所变化,是直接 x 0 x_0 x0 中选出 d i s t r i b u t i o n \rm distribution distribution 个,并且可能乘一个 − 1 -1 1

答案又是啥呢?注意到 d ≤ c d\le c dc,其实答案就是 f ( 0 , d ) f(0,d) f(0,d) 啊,多么巧妙!

最后剩下一些边边角角的问题: x m x_m xm 怎么求?答案:暴力。因为 ∑ x ≤ 1 0 5 \sum x\le 10^5 x105 。并且事实上确实可能多解,但是最多 3 3 3 个解(题解声称打表发现了这一点),都做一遍。(而且这 3 3 3 x m x_m xm 并不总是有解。)

另: ∣ A ( x ) B ( x ) ∣ |{A(x)\over B(x)}| B(x)A(x) 是我修改过的题面。我希望我没有搞错。原题目是:

  • A ( x ) A(x) A(x) 的次数小于 B ( x ) B(x) B(x) A ( x ) A(x) A(x) 小于 B ( x ) B(x) B(x)
  • A ( x ) , B ( x ) A(x),B(x) A(x),B(x) 次数相同,那么从最高次项开始,依次比较系数,第一处系数不同时是 A ( x ) A(x) A(x) 的系数更小。

还有一个容易忽略的情况是 n = 0 n=0 n=0 。此时是 μ k \mu^k μk 或者 i d 0 × i d 0 × i d 0 × ⋯ × i d 0 id_0\times id_0\times id_0\times\cdots\times id_0 id0×id0×id0××id0 得到的结果,大家肯定都很会做。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值