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

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述

[题目链接](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

### 关于CCPC江苏2022的信息 尽管当前提供的引用主要涉及的是“海康威视杯”2022年第十四届四川大学生程序设计大的内容[^1],并未直接提及CCPC江苏2022的具体细节。然而,可以推测两者作为级竞,在题目难度、比形式以及参经验方面可能存在相似之处。 #### 比概述 中国大学生程序设计竞(China Collegiate Programming Contest, CCPC)是一项面向全国高校学生的高水平编程事。江苏省CCPC通常会吸引来自内各大院校的学生参与。这类比一般分为多个阶段,包括区域和总决。对于具体到某一年份的比情况,例如2022年的江苏区,可以通过以下几个角度来探讨: - **题解分析** 虽然未提供具体的CCPC江苏2022题解文档链接或内容,但从其他份的经验来看,此类比往往涵盖了算法基础、数据结构应用及复杂问题求解等多个领域。例如动态规划、图论、字符串处理等问题类型均可能成为考察重点。 - **参体验分享** 学生们在参加类似规模的大时,普遍反馈准备过程非常重要。这不仅限于技术能力提升还包括团队协作默契培养等方面。一位名为Linno的博主在其文章中提到过关于如何有效备战ACM/ICPC类事的一些技巧,这些方法同样适用于CCPC系列比: - 定期刷LeetCode或其他在线评测平台上的经典习题; - 组织模拟训练营以增强实战演练效果; - 总结每次练习中的错误并加以改正。 ```python # 示例代码展示了一个简单的二分查找实现方式, # 这种基本技能是在各类程序设计比中都需要掌握的基础之一。 def binary_search(arr, target): low = 0 high = len(arr) - 1 while low <= high: mid = (low + high) // 2 if arr[mid] == target: return mid elif arr[mid] < target: low = mid + 1 else: high = mid - 1 return -1 ``` #### 结语 综上所述,虽然目前缺乏针对CCPC江苏2022确切资料的支持,但通过借鉴同级别活动实例仍能获取不少有价值的信息用于参考学习。希望上述介绍能够帮助您更好地理解该主题相关内容!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值