将正整数n表示成一系列正整数之和,n=n1+n2+…+nk,其中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 所有不同的划分中,将最大加数 n1 不大于 m 的划分个数记作 q(n,m) ,称它为属于 n 的一个 m 划分。根据 n 和 m 的关系,考虑以下几种情况:

(1)当 n=1 时,不论 m 的值为多少( m>0) ,只有一种划分即 {1};例如上述p(1,1) = 1.全部由1组成。

(2)  当 m=1 时,不论 n 的值为多少,只有一种划分即 n 个 1 ; p(6,1)= {1,1,1,...,1} = 1;

(3) 当 n=m 时,根据划分中是否包含 n ,可以分为两种情况:

(a). 划分中包含 n 的情况,只有一个即 {n} ;

(b).划分中不包含 n 的情况,这时划分中最大的数字也一定比 n 小,即 n 的所有 (n-1) 划分。

也就是说,q(n,n)代表最大的加数不大于n;

q(n,n-1) 代表最大加数不大于n-1;

1 代表 最大加数为n

因此 q(n,n) =1 + q(n,n-1);

(4) 当 nn>1);

(5) 但 n>m 时,根据划分中是否包含最大值 m ,可以分为两种情况:

❤(a). 划分中包含 m 的情况,即 {m, {x1,x2,...xi}}, 其中 {x1,x2,... xi}  的和为 n-m ,可能再次出现 m ,因此是( n-m )的 m 划分,因此这种划分个数为 q(n-m, m);包括m的总数就是{x1,x2,... xi} 最大加数不大于m的总数(现在已经有一个m了,从剩下的{x1,x2,... xi}找到不大于m的总数就行)。

(b). 划分中不包含 m 的情况,则划分中所有值都比 m 小,即 n 的 (m-1) 划分,也就是最大数不大于m-1的个数,个数为 q(n,m-1);

因此 q(n, m) = q(n-m, m)+q(n,m-1);

p(n,m) = {  1,                       m= 1;

|  p(n,n)                  m>n;

|  1+p(n,m-1)          n=m;

{   p(n,m-1) +p(n-m,m); n>m>1

int p(int n,int m)

{

if(m=1) return 1;

if(m>n) return p(n,n);

if(m==n) return p(n,m-1)+1;

return p(n,m-1)+p(n-m,m);

}

整数分划c语言,C-整数划分相关推荐

  1. c语言怎么进行大整数加法,c语言 大整数加法

    2013-12-07 回答 以前我也做过一个大整数程序,2000!,不过那里面没有减法.做这个减法真让花时间啊. #include #include #include #define max 4000 ...

  2. 整数因子分解c语言递归,整数因子分解:计算一个整数所有的分解式(递归实现)...

    原始问题描述: 对于给定的正整数n,计算n有多少种不同的分解式. 例如,当n=12时,有8种不同的分解式: 12=12, 12=6×2, 12=4×3, 12=3×4, 12=3×2×2, 12=2× ...

  3. 分治法大整数乘法c语言,大整数乘法(分治法)

    #include #include using namespace std; int num(int u) //计算乘数的位数 { int i,num; i=1; num=u/10; while(nu ...

  4. python中不属于整数类型_哪个选项不是Python语言的整数类型?

    [单选题]下面不属于Python保留字的是: [单选题]关于Python的元组类型,以下选项错误的是: [单选题]关于整数类型的4种进制表示,哪个选项的描述是正确的? [简答题]阅读以下冒泡法排序代码 ...

  5. c语言中将整数转换成字符串_在C语言中将ASCII字符串(char [])转换为八进制字符串(char [])...

    c语言中将整数转换成字符串 Given an ASCII string (char[]) and we have to convert it into octal string (char[]) in ...

  6. c语言判断整数_用c++编写闰年的判断基础程序

    其实c++语言与c语言有太多共同的东西,学习过c语言再学习c++语言就显得轻而易举.当然学过了c++再去学习c语言也是有一些帮助的(但是个人不提倡先学习c++在学c语言).由于现在经常看见有关闰年的程 ...

  7. c语言中将整数转换成字符串_在C语言中将ASCII字符串(char [])转换为十六进制字符串(char [])...

    c语言中将整数转换成字符串 Given an ASCII string (char[]) and we have to convert it into Hexadecimal string (char ...

  8. 整数的分类处理c语言switch,整数的分类处理

    整数的分类处理 (C语言) 给定 N 个正整数,要求你从中得到下列三种计算结果: A1 = 能被 3 整除的最大整数 A2 = 存在整数 K 使之可以表示为 3K+1 的整数的个数 A3 = 存在整数 ...

  9. C语言 大整数运算(加、减、乘)

    题目:大整数计算 背景介绍: 大整数一般指超过十尾的十进制整数,假定不超过五十位.这类大整数在C语言系统中因超界溢出而不能直接表达或计算. 实现方法: 以字符串形式输入.输出和存放大整数,计算时可以将 ...

最新文章

  1. POJ-1860-Currency Exchange
  2. gantt markdown
  3. MariaDB Galera 集群安装配置
  4. mui ajax ab,mui.ajax中文乱码
  5. 2.let和const命令
  6. mysql 基于时间分区_MySQL基于时间字段进行分区的方案总结
  7. js获取数组最大值的索引_数组中最大值的返回索引
  8. html属性是dom属性吗,HTML DOM 属性 对象
  9. java方法_Java方法
  10. Mac上使用SecureCRT
  11. 引用echar显示图形
  12. raspios-bullseye-arm64 系统 BUG
  13. 点击计算机直接隐藏到任务栏,win7电脑的任务栏被自动隐藏了怎么办?
  14. [kubernetes] Endpoint 和 Service介绍与应用
  15. 为什么硬盘明明还有空间,linux却说硬盘空间不足?inode;mkdir: 无法创建目录shen1: 设备上没有空间
  16. 【菜鸟窝】人工智能就业与面试指南
  17. Spring Cloud Alibaba-SkyWalking链路追踪
  18. GLU-Net代码的理解
  19. nsd engineer
  20. mall学习01-整合mybatis

热门文章

  1. 联想黑将S5 HINKPAD-S5-Clover5126-Mojave10.14.6 完美驱动
  2. android 9.0谷歌商店,Android 10现可选择Play商店主题模式 附Android 9强制开启深色模式教程...
  3. java 数据结构 无向图_Java数据结构和算法(十五)——无权无向图
  4. 【转】huhamhire-hosts自动更新Google Hosts文件教程
  5. pyqt5 qstring在哪个库_从Qt C++类库到PyQt5
  6. 硬币排成线-LintCode
  7. plsql解锁oracle用户
  8. 转-IE浏览器自动配置代理脚本-Proxy.PAC文件及PAC相关语法
  9. Java用i74G的显卡_【省钱日记】第5期,二手RX560 4G显卡+老i7,实测体验分享
  10. 网页源代码拿到后怎么使用(手机怎么看网页源代码)