关闭

五边形数定理

6370人阅读 评论(1) 收藏 举报
分类:

设第n个五边形数为,那么,即序列为:1, 5, 12, 22, 35, 51, 70, ...

 

对应图形如下:

 

 

设五边形数的生成函数为,那么有:

 

 

 

 

以上是五边形数的情况。下面是关于五边形数定理的内容:

 

五边形数定理是一个由欧拉发现的数学定理,描述欧拉函数展开式的特性。欧拉函数的展开式如下:

 

 

 

欧拉函数展开后,有些次方项被消去,只留下次方项为1, 2, 5, 7, 12, ...的项次,留下来的次方恰为广义五边形数。

 

 

五边形数和分割函数的关系

 

欧拉函数的倒数是分割函数的母函数,亦即:

 

   其中为k的分割函数。

 

上式配合五边形数定理,有:

 

 

 
在 n>0 时,等式右侧的系数均为0,比较等式二侧的系数,可得
 

p(n) - p(n-1) - p(n-2) + p(n-5) + p(n-7) + \cdots=0

 

因此可得到分割函数p(n)的递归式:p(n) = p(n-1) + p(n-2) - p(n-5) - p(n-7) + \cdots

 

例如n=10时,有:p(10) = p(9) + p(8) - p(5) - p(3) = 30 + 22 - 7 -  3 = 42

 

 

所以,通过上面递归式,我们可以很快速地计算n的整数划分方案数p(n)了。

 

 

题目: http://acm.hdu.edu.cn/showproblem.php?pid=4651

#include <iostream>
#include <string.h>
#include <stdio.h>

using namespace std;
typedef long long LL;

const int N=100005;
const LL MOD=1000000007;

LL ans[N],tmp[N];

void Init()
{
    int t=1000;
    for(int i=-1000;i<=1000;i++)
        tmp[i+t]=i*(3*i-1)/2;
    ans[0]=1;
    for(int i=1;i<N;i++)
    {
        ans[i]=0;
        for(int j=1;j<=i;j++)
        {
            if(tmp[j+t]<=i)
            {
                if(j&1)  ans[i]+=ans[i-tmp[j+t]];
                else     ans[i]-=ans[i-tmp[j+t]];
            }
            else break;
            ans[i]=(ans[i]%MOD+MOD)%MOD;
            if(tmp[t-j]<=i)
            {
                if(j&1) ans[i]+=ans[i-tmp[t-j]];
                else    ans[i]-=ans[i-tmp[t-j]];
            }
            else break;
        }
        ans[i]=(ans[i]%MOD+MOD)%MOD;
    }
}
int main()
{
    int t,n;
    Init();
    cin>>t;
    while(t--)
    {
        cin>>n;
        cout<<ans[n]<<endl;
    }
    return 0;
}


 

题目:http://acm.hdu.edu.cn/showproblem.php?pid=4658

 

题意:问一个数n能被拆分成多少种方法,且每一种方法里数字重复个数不能超过k(等于k)。
 
分析递推式为:
 
 
 
#include <iostream>
#include <string.h>
#include <stdio.h>

using namespace std;
const int N = 100005;
const int MOD = 1000000007;

int dp[N];

void Init()
{
    dp[0] = 1;
    for(int i=1;i<N;i++)
    {
        dp[i] = 0;
        for(int j=1;;j++)
        {
            int t = (3*j-1)*j / 2;
            if(t > i) break;
            int tt = dp[i-t];
            if(t+j <= i) tt = (tt + dp[i-t-j])%MOD;
            if(j&1) dp[i] = (dp[i] + tt)%MOD;
            else    dp[i] = (dp[i] - tt + MOD)%MOD;
        }
    }
}

int Work(int n,int k)
{
    int ans = dp[n];
    for(int i=1;;i++)
    {
        int t = k*i*(3*i-1) / 2;
        if(t > n) break;
        int tt = dp[n-t];
        if(t + i*k <= n) tt = (tt + dp[n-t-i*k])%MOD;
        if(i&1) ans = (ans - tt + MOD)%MOD;
        else    ans = (ans + tt)%MOD;
    }
    return ans;
}

int main()
{
    Init();
    int n,k,t;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d%d",&n,&k);
        printf("%d\n",Work(n,k));
    }
    return 0;
}

 

 

4
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

【转载】五边形数定理、分拆数

原文博客:http://blog.csdn.net/zhoufenqin/article/details/9821617 分拆数 在将分拆数之前先介绍一点五边形数 http://en.wi...
  • u010794465
  • u010794465
  • 2013-08-11 12:38
  • 1275

<Android学习日志>自定义View-正五边形(蜘蛛网雷达效果)

简介:                   最近由于业务需要,需要绘制自定义的五边形来显示各个方面的趋势,由于之前对自定义view掌握并不熟练,,所以在网上搜索了一些先关的资料,在这里给大家推荐原博...
  • lehtoon_1992
  • lehtoon_1992
  • 2016-04-01 14:02
  • 1883

canvas标签画正多边形函数

/* *以(x,y)为中心,半径为r的正n边形 *@param c 是canvas的上下文对象 *@param angle 是第一个点(以最上面的顶点为准)偏离中心点(x,y)的弧度 * an...
  • u012948710
  • u012948710
  • 2014-02-27 14:22
  • 2327

hdu 4651 Partition (利用五边形定理求解分割数)

以下内容摘自维基百科: 五边形数定理[编辑] 五边形数定理是一个由欧拉发现的数学定理,描述欧拉函数展开式的特性[1] [2]。欧拉函数的展开式如下: 亦即 ...
  • u010697167
  • u010697167
  • 2014-05-08 11:07
  • 843

五边形数定理 (hdu 4651 , hdu 4658)

五边形数定理 (hdu 4651 , hdu 4658) 五边形数定理说得很详细的博文 点击打开链接 总结一下五边形数几个要点 1. 第n个五边形数的公式: 五边形数 0  1  2  5  7...
  • whai362
  • whai362
  • 2015-01-08 20:46
  • 1123

五边形数定理的一种证明

很久以前就知道五边形数定理了……但是用它A过几道题,一直不知道怎么证明感觉很不痛快 QwQ……最近在wiki上找到一个简单优雅的证明方法……在网上并没有找到过中文的证明,所以把它粗略翻译一下,放在这里...
  • visit_world
  • visit_world
  • 2016-10-04 18:38
  • 1660

hdu4651 4658 整数拆分 五边形数定理

整数拆分可以用dp写,O(n^2) hdu4651和hdu4658给的范围是10^5,需要用到母函数和五边形数定理。 1)整数拆分的母函数表示: p(k) 表示把k拆分的方案数。 ...
  • hccz95
  • hccz95
  • 2015-02-04 21:12
  • 516

Android自定义View-蜘蛛网属性图(五边形图)

首先看看效果图: 先简要说一下这里需要涉及到的知识点: 2D绘图基础。 高中基本的三角函数 Sin,Cos。 参考的文章: Android自定义控件 芝麻信用分雷达图 这里为了尊重上面这篇文章的作者,...
  • zone_
  • zone_
  • 2017-04-27 11:25
  • 383

使用UGUI自定义五边形

using UnityEngine; using System.Collections.Generic; using UnityEngine.UI;/* * * 3 8 * ...
  • dazhi51
  • dazhi51
  • 2016-01-12 11:29
  • 564

用A4折出正方形,等边三角形,正八边形,正六边形,正五边形,正七边形

在一个优秀的国外个人网站(Darren Abbey)上发现的,大家可以尝试证明它们。估计后面你会崩溃,呵呵。或者,用程序证明也不错,欢迎讨论。  用A4折出正方形 可以折出正方形,后面的就有了基础。。...
  • deaboway
  • deaboway
  • 2011-03-15 18:12
  • 7041
    个人资料
    • 访问:2470252次
    • 积分:24479
    • 等级:
    • 排名:第304名
    • 原创:472篇
    • 转载:42篇
    • 译文:0篇
    • 评论:506条
    最新评论