博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[学习笔记]整数划分问题
阅读量:4313 次
发布时间:2019-06-06

本文共 944 字,大约阅读时间需要 3 分钟。

整数划分问题

将正整数n表示成一系列正整数之和,

n=n1+n2+n3+...+n(其中,n1≥n2≥...≥nk≥1,k≥1)

正整数n的这种表示称为正整数n的划分。正整数n的不同的划分个数称为正整数n的划分数,记作P(n)。

例如,正整数6有如下11种不同的划分,所以P(6)=11。

6;

5+1;

4+2,4+1+1;

3+3,3+2+1,3+1+1+1;

2+2+2,2+2+1+1,2+1+1+1+1;

1+1+1+1+1+1;

在正整数n的所有不同的划分中,将最大加数Nmax不大于m的划分个数记作Q(n,m)。

  1. 首先我们能知道Q(n,1)=1,n≥1,就是Nmax不大于1的时候,如Q(6,1)即为1+1+1+1+1+1这一种,所以Q(n,1)=1;
  2. 当m大于n时,Q(n,m)=Q(n,n),因为最大加数Nmax不能大于n,所以有Q(1,m)=1,如Q(6,8)=Q(6,6);
  3. Q(n,n)=1+Q(n,n-1),如Q(6,6)=1+Q(6,5)(其实6本身算不算做一种划分我不太确定……因为定义此问题的时候描述的是将正整数n表示成一系列正整数之和,而6本身并没有和其他正整数相加……但是书上是这么写的= =);
  4. Q(n,m)=Q(n,m-1)+Q(n-m,m),n>m>1;
1 // 2 //  main.c 3 //  整数划分 4 // 5 //  Created by AslieLeo on 13-4-14. 6 //  Copyright (c) 2013年 AslieLeo. All rights reserved. 7 // 8  9 #include 
10 11 int IntegerDivide(int n,int m){12 if((n<1)||(m<1)) {13 return 0;14 }15 if ((n==1)||(m==1)) {16 return 1;17 }18 if (n

 

转载于:https://www.cnblogs.com/dystopia-p/archive/2013/04/14/3020993.html

你可能感兴趣的文章
从Vue.js窥探前端行业
查看>>
学习进度
查看>>
poj3368 RMQ
查看>>
“此人不存在”
查看>>
github.com加速节点
查看>>
解密zend-PHP凤凰源码程序
查看>>
python3 序列分片记录
查看>>
Atitit.git的存储结构and 追踪
查看>>
atitit 读书与获取知识资料的attilax的总结.docx
查看>>
B站 React教程笔记day2(3)React-Redux
查看>>
找了一个api管理工具
查看>>
C++——string类和标准模板库
查看>>
zt C++ list 类学习笔记
查看>>
git常用命令
查看>>
探讨和比较Java和_NET的序列化_Serialization_框架
查看>>
1、jQuery概述
查看>>
数组比较大小的几种方法及math是方法
查看>>
FTP站点建立 普通电脑版&&服务器版
查看>>
js 给一段代码,给出运行后的最终结果的一些综合情况、
查看>>
webservice 详解
查看>>