前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >母函数法解决整数划分

母函数法解决整数划分

作者头像
actionzhang
发布2022-11-30 17:04:24
3380
发布2022-11-30 17:04:24
举报

问题描述:把一个整数n划分成1到n的划分,例如3可以划分为1+1+1,1+2,3这三种划分,那么求n的划分数。

解题思路:

    可以把1,设为x的0次方:x^0

    把1,设为x的1次方:x^1

    .......把n,设为是x的n次方:x^n

    那么1可能出现,0,1,2,3,4,5,6...n次,而2可能出现0,1,2,3,.......n/2次,3可能出现0,1,2,3,4........n/3次等等。

   依照上面的把1可以表示成x^1:那么可能出现的次数就是1+x^1+2*x^1+3*x^1+...n*x^1,同理有1+1*x^2+2*x^2+.....(n/2)*x^2那么把这些多项式相乘起来,得

(1+1*x^1+2*x^1....n*x^1)(1+x^2+2*x^2....(n/2)*x^2).....(x^n)是不是x^n最终的系数就是n的整数划分数,下面是我的代码:

代码语言:javascript
复制
public class Main {

	public static int getNum(int n){
		//存放最终的结果
		int[] c1=new int[n+1];
		//存放当前两个多项式相乘的结果
		int[] c2=new int[n+1];
		//初始化让c1开始的系数全为1
		Arrays.fill(c1, 1);
		//初始化让c2开始的系数全为0
		Arrays.fill(c2, 0);
		for(int i=2;i<=n;i++){
		//i代表当前的x到底是多少次方
			for(int j=0;j<n+1;j++){
				//j代表从c1取出每个系数准备与当前多项式相乘
				for(int k=0;k+j<=n;k+=i){
					//k代表从当前x次方的多项式取出每一项然后,与c1里的多项式相乘
					c2[j+k]+=c1[j];
				}
			}
			//将c2存储的缓存结果放入c1
			for(int z=0;z<n+1;z++){
				c1[z]=c2[z];
				c2[z]=0;
			}
		}
		return c1[n];
	}
	public static void main(String[] args) {
		System.out.println(getNum(100));

	}

}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2015-08-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档