【2019CCPC湖南全国邀请赛(广东省赛、江苏省赛)】Neko and function

数论与组合数学在算法竞赛中的应用
本文深入探讨了数论与组合数学在算法竞赛中的应用,特别是在求解特定数学模型问题上的技巧。通过分析经典问题,如计算特定条件下正整数分解的方案数,介绍了积性函数的概念,并提出了一种新颖的筛法思想,用于高效解决大规模数据范围内的求和问题。

题目描述

[题目链接](http://acm.hdu.edu.cn/showproblem.php?pid=6537)

设 $f(n,k)$ 为 $\prod_{i=1}^{k}a_i=n$ 的方案数,其中 $a_i>1$

比如说 $n=6,k=2$ 的时候,有 $6=2 \times 3 = 3 \times 2$,因此 $f(6,2)=2$

那么你需要求出 $\sum_{i=1}^{n}f(i,k)$ 在模 $10^9+7$ 意义下的值

数据范围:$1 \le n \le 2^{30}, 1 \le k \le 30$

题解

首先不管 $a_i>1$,也就是只需要要求 $a_i \ge 1$,设 $g(n,k)$ 表示 $\prod_{i=1}^{k}a_i=n$ 的方案数

然而这个好像是个大众皆知的经典模型……比如[牛客小白月赛9 J](https://ac.nowcoder.com/acm/contest/275/J)……

由于质因子互不干涉,因此 $g(n,k)$ 是一个积性函数

考虑 $g(p^e,k)$,相当于把 $e$ 个相同的球放到 $k$ 个不同的盒子的方案数,也是 $\sum_{i=1}^{k}x_i=e$ 的非负整数解的个数

即 $g(p^e,k)={e + k - 1 \choose k-1}$

那么回到计算 $f(n,k)$,考虑容斥有多少个 $a_i=1$,即:

$$
\begin{aligned}
f(n,k)
=&\sum_{i=0}^{k} {k \choose i} (-1)^{i} g(n,k-i) \\
=&\sum_{i=0}^{k} {k \choose i} (-1)^{k-i}g(n,i)
\end{aligned}
$$

求和后为:

$$
\begin{aligned}
\sum_{i=1}^{n} f(i,k)
= &\sum_{i=1}^{n}\sum_{j=0}^{k} {k \choose j} (-1)^{k-j} g(i,j) \\
= &\sum_{j=0}^{k} {k \choose j} (-1)^{k-j} \sum_{i=1}^{n} g(i,j)
\end{aligned}
$$

由于 $g(n,k)$ 是个积性函数,找个啥啥筛应该都能过吧……

实际上不需要这么麻烦……

直接用 $f(n,k)$ 的定义就好了,那么就考虑最后一个位置放多少就行了,即:

$$
\begin{aligned}
f(n,k)=\sum_{d|n \land d \ne 1} f\left( \frac{n}{d},k-1\right)
\end{aligned}
$$

可以得到:

$$
\begin{aligned}
F_{k+1}(n)
=& \sum_{i=1}^{n}f_{k+1}(i) \\
=& \sum_{i=1}^{n}\sum_{j|i \land j \ne i} f_{k}(j) \\
=& \sum_{i=1}^{n}\sum_{j|i \land j \ne 1} f_{k}\left(\frac{i}{j}\right) \\
=&\sum_{j=2}^{n} \sum_{i=1}^{n} [j|i] \cdot f_k \left( \frac{i}{j} \right) \\
=&\sum_{j=2}^{n} \sum_{i=1}^{\left \lfloor \frac{n}{j} \right\rfloor} f_k \left( i \right) \\
=&\sum_{j=2}^{n} F_k\left( \left\lfloor \frac{n}{j} \right\rfloor \right)
\end{aligned}
$$

转载于:https://www.cnblogs.com/KingSann/articles/11022226.html

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值