五边形数和两个递归式

五边形数

五边形数是对每条边上有 \(n\) 个点构成的五边形的总点数的数列的称呼。

由上图,可以得出这个数列的递归式。

\[
\begin{aligned}
a_1&=1 \a_n&=a_{n-1}+(3n-2) \\end{aligned}
\]

解递归式得到通项公式

\[
\begin{aligned}
a_n&=\sum _{i=1}^n(3i-2)=\frac{n(3n-1)}{2}
\end{aligned}
\]

它也能通过三个三角形数得到。

狭义的五边形数中 \(n\) 均为正整数,但若我们拓展一下,令 \(n\) 为任意整数,此时形成的数列就是一般的五边形数数列。

下面给出两种五边形数的前几项。

\[
\begin{aligned}
1, 5, 12, 22, 35, 51, 70, 92, 117, 145, 176, 210, 247, 287, 330 \0, 1, 2, 5, 7, 12, 15, 22, 26, 35, 40, 51, 57, 70, 77, 92, 100, 117, 126
\end{aligned}
\]

其中广义的五边形数是按照 \(a_0,a_1,a_{-1},a_2,a_{-2}\dots\) 来给出的。容易发现这样的排列方式恰好构成递增的序列。

与五边形数有关的两个递归式都与其生成函数上的性质有关。欧拉发现,一个无穷乘积的形式幂级数展开式与五边形数的关系:

\[
\Phi(x)=\prod _{i=1}^\infty (1-x^i)=\sum _{i}(-1)^ix^{a_i}=1+\sum _{i=1}^\infty (-1)^ix^{\frac{i(3i\pm1)}2}
\]

其中右边的 \(i\) 为任意整数。尝试列出左边生成函数的展开式的前 30 项。

\[
1-x-x^2+x^5+x^7-x^{12}-x^{15}+x^{22}+x^{26}+\cdots
\]

符合上面的式子。

欧拉对此的证明过于繁琐,下面给出一个简单的组合证明。

观察左边的无穷乘积,\(x^n\) 的系数其实是 (\(n\) 划分成偶数个不同数的方案数) - (\(n\) 划分成奇数个不同数的方案数) 。

现在用一种方法,使他们一一对应起来,达到尽量抵消的目的。

设 \(n\) 的划分为

\[
n=b_1+b_2+\cdots b_m
\]

\(b\) 从大到小排序,设 \(s\) 为满足 \(b_1=b_2+1=b_3+2=\cdots b_s+(s-1)\) 最大的 \(s\) ,即从 \(b_1\) 开始连续下降的个数。

定义一种变换 \(f(b)\):

  • 若 \(s<b_m\) ,那么变换到 \(n=(b_1-1)+(b_2-1)+\cdots +(b_s-1)+b_{s+1}+\cdots+b_m+s\) ,即把前面的 \(s\) 个减一并挪到最后。
  • 若 \(s\ge b_m\) ,那么变换到 \(n=(b_1+1)+(b_2+1)+\cdots +(b_{b_m}+1)+b_{b_m+1}+\cdots +b_{m-1}\) ,即把 \(b_m\) 分配到最开始的 \(b_m\) 个。

容易发现,若 \(f(b)\) 合法,那么 \(f(f(b))=b\) ,因此所有对 \(f\) 合法的 \(b\) 构成了一个双射,并且 \(|f(b)|\) 与 \(|b|\) 奇偶性不同,即可以发生抵消。

关键在于无法使用 \(f\) 变换的 \(b\) ,它们就是抵消剩下的东西。无法使用变换仅有两种情况:

  • \(s=m=b_m\) ,此时应用第二种变换并没有改变奇偶性。

此时有 \(n=m+(m+1)+\cdots +(2m-1)=\frac{m(3m-1)}{2}\)

  • \(s+1=m+1=b_m\) ,此时应用第一种变换使得 \(b_m=b_{m+1}\) ,不是不同数划分。

此时有 \(n=(m+1)+\cdots +2m=\frac{(3m-2)(m-1)}{2}=\frac{m(3m+1)}{2}\)

都是五边形数!

也就是当 \(n\) 为五边形数的时候会恰好剩余一个,系数为 \(m\) 的奇偶性,若 \(m\) 为奇数则 -1 ,否则 1 。

这样我们就证明了这个展开式。

应用

五边形数的两个应用运用了 五边形数 与 无穷乘积的展开式的关系。

分拆数

与五边形数关系最密切的是分拆数。

定义 \(p(n)\) 表示将 \(n\) 分成许多个无序的正整数的和的分法,特别地,\(p(0)=1,\forall k<0,p(k)=0\) 。

例如 \(4=4=3+1=2+2=2+1+1=1+1+1+1\) ,那么 \(p(4)=5\) 。

设分拆数的生成函数:

\[
P(x)=\sum _{i=0}^\infty p(i)x^i
\]

显然有 \(P(x)=\frac 1{\Phi(x)}\) ,即 \(\frac 1{(1-x^k)}\) 的泰勒展开为 \(\sum _{i=0}^\infty x^{ki}\) 。

那么我们可以得到

\[
\begin{aligned}
\Phi(x)P(x)&=1 \(1+\sum _{i=1}^\infty(-1)^ix^{\frac{i(3i\pm 1)}{2}})(\sum _{i=0}^\infty p(i)x^i)&=1
\end{aligned}
\]

对比 \(x^n\) 的系数就有

\[
\begin{aligned}
p(0)&=1 \p(n)+\sum _{i=1}^\infty(-1)^ip(n-\frac{i(3i\pm 1)}{2})&=0
\end{aligned}
\]

因此我们可以用这个东西来 \(O(n\sqrt n)\) 处理出 \(p(1)\cdots p(n)\) 。

约数和函数

定义 \(\sigma(n)=\sum _{d|n}d\) ,设 \(F(x)=\sum _{i=1}^\infty \sigma(i)x^i\) 为 \(\sigma\) 的生成函数。

特别地,\(\forall k<0,\sigma(k)=0\) 。

那么有

\[
F(x)=\frac{-x\Phi‘(x)}{\Phi(x)}
\]

由此可以推出

\[
\sigma(n)+\sum _{i=1}^\infty (-1)^i\sigma(n-\frac{i(3i-1)}{2})=[n是广义五边形数]*(-n)
\]

证明

\[
\begin{aligned}
F(x)&=\frac {-x\Phi‘(x)}{\Phi(x)} \-\int \frac {F(x)}{x} \mathrm{d}x&=\ln \Phi(x) \&=\sum _{i=1}^\infty \ln (1-x^i) \&=-\sum _{i=1}^\infty\sum _{j=1}^\infty \frac{x^{ij}}{j} \\int \frac {F(x)}{x} \mathrm{d}x&=\sum _{i=1}^\infty\sum _{j=1}^\infty \frac{x^{ij}}{j}
\end{aligned}
\]

对一个一次多项式 \(F(x)\) 除以 \(x\) 再积分其实就是每项除以其次数,对比两边 \(x^n\) 的系数,就有

\[
\begin{aligned}
\frac{a_nx^n}{n}&=\sum _{d|n}\frac 1dx^n \a_n&=\sum _{d|n}\frac n d=\sum _{d|n} d=\sigma(n)
\end{aligned}
\]

原文地址:https://www.cnblogs.com/owenyu/p/8366352.html

时间: 2024-08-01 05:10:53

五边形数和两个递归式的相关文章

五边形数定理

五边形数定理 转自<维基百科> http://zh.wikipedia.org/wiki/五邊形數定理 五边形数定理是一个由欧拉发现的数学定理,描述欧拉函数展开式的特性[1] [2].欧拉函数的展开式如下: 亦即 欧拉函数展开后,有些次方项被消去,只留下次方项为1, 2, 5, 7, 12, ...的项次,留下来的次方恰为广义五边形数. 若将上式视为幂级数,其收敛半径为1,不过若只是当作形式幂级数(formal power series)来考虑,就不会考虑其收敛半径. 和分割函数的关系 欧拉函

斐波那契数的两种实现方式———1.递归实现,2迭代实现

对于斐波那契数,若是采用递归的算法,每个递归调用都将触发另外两个递归调用,而这两个中调用任意一个还会触发另外两个的调用.递归调用的时间复杂度O(2^N),空间复杂度为O(N),所以在计算略大的数会花费一定的时间和空间.递归程序如下: #include<iostream> using namespace std; unsigned long long Fib(size_t num) {     if (num < 2)     {         return num;     }    

【算法】2 由股票收益问题再看分治算法和递归式

回顾分治算法 分治算法的英文名叫做"divide and conquer",它的意思是将一块领土分解为若干块小部分,然后一块块的占领征服,让它们彼此异化.这就是英国人的军事策略,但我们今天要看的是算法. 如前所述,分治算法有3步,在上一篇中已有介绍,它们对应的英文名分别是:divide.conquer.combine. 接下来我们通过多个小算法来深化对分治算法的理解. 二分查找算法 问题描述:在已排序的数组A中查找是否存在数字n. 1)分:取得数组A中的中间数,并将其与n比较 2)治:

hdu4651(广义五边形数 &amp; 分割函数)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4651 题意:f(x) 为将 x 分成其他数和的形式的方案数.对于 t 组输入,输出 f(xi). 思路:直接套公式即可. 1.广义五边形数qn 为 (3*n*n-n)/2 和 (3*n*n+n)/2q1 = 1, 2 q2 = 5, 7q3 = 12, 15...2.分割函数p(n) = sigma(-1)^(i-1)p(n-qi) (qi <= n) //这里的 qi 对应前面的两个数 代码: 1

分治策略(求解递归式的方法)

分解:将原问题划分成形式相同的子问题,规模可以不等,对半或2/3对1/3的划分. 解决:对于子问题的解决,很明显,采用的是递归求解的方式,如果子问题足够小了,就停止递归,直接求解. 合并:将子问题的解合并成原问题的解. 这里引出了一个如何求解子问题的问题,显然是采用递归调用栈的方式.因此,递归式与分治法是紧密相连的,使用递归式可以很自然地刻画分治法的运行时间.所以,如果你要问我分治与递归的关系,我会这样回答:分治依托于递归,分治是一种思想,而递归是一种手段,递归式可以刻画分治算法的时间复杂度.

需求:过滤下面这个网页里共723行 校对中里 行数为两位数的 行 并设置sz和rz在Windows和Linux之间发送和接收文件不用搭FTP

需求:过滤下面这个网页里共723行 校对中里 行数为两位数的 行 因为翻译当然要选择行数少的来翻译,翻译PG文档 https://github.com/postgres-cn/pgdoc-cn/wiki/check9.3grep  -E  "共[0-9]{2}行"  check9.3 [[email protected] ~]# grep  -E  "共[0-9]{2}行"  check9.3 |wc -l32 打开SecureCRT软件 -> Options

递归式求解

算法设计中经常会用到递归,利用递归式的方法可以清晰地显示算法的整个过程,而对于分析算法的复杂度,解递归式就有了用处,这里的方法来自于<算法导论>. 1. 代换法 代换法只能用于解那种很容易猜的情形,它可用来确定一个递归式的"O"和"Ω"界. 举例,确定递归式 T(n) = 2*T(└n/2┘) + n 的一个"O"界 1.1 先猜测有某个界存在 由于这个递归式与合并排序的计算时间复杂度的递归式很相似,所以我们猜测其解为 T(n) =

用两种递归思路与循环实现单链表的反转

typedef struct ListNode{ int data; struct ListNode *next; }ListNode; //递归一 ListNode *ReverseList (ListNode *pHead, ListNode *nHead = NULL) { //每次取下第一个节点头插法创建新链表 //nHead为反转后链表的头节点 if(pHead == NULL) return NULL; ListNode *pNext = pHead -> next; pHead -

字符串匹配的双重递归式写法

字符串的匹配有很高效的KMP.Sunday等算法,可供使用.下面使用的匹配算法本质上是朴素的,但它的双重递归式的写法仍然值得借鉴. 完整示例代码 #include <stdio.h> #include <stdlib.h> #include <string.h> char *SubStrWithR(const char *str, const char *sub) { if (str == NULL || sub == NULL) return NULL; int fi