问题:将以正整数n表示成一系列正整数之和. n=n1+n2+n3+...+nk (n1>=n2>=n3>=nk>=1, k>=1)这就是正整数n的一个划分,正整数n不同的划分个数称为正整数n的划分数, 记作p(n)例如:6 有如下11种划分则p(6)=116;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;则求任意正整数的划分数p(n).
1. c改编的
class Int
{
private int n;
private int[] a;
public int cnt;
public Int(int x)
{
n = x;
cnt = 0;
a = new int[100];
}
public void outPut(int m)
{
for(int i=0;i<m;i++)
System.out.print(a[i] + "+");
cnt++;
System.out.println();
}
public void fenjie(int n,int m)
{
int i;
if(n==1)
outPut(m);
else
for(i=n-1;i>=1;i--)
if(m==0||i<=a[m-1])
{
a[m]=i;
fenjie(n-i,m+1);
}
}
public static void main(String[] args)
{
int x = 7;
Int i = new Int(x);
i.fenjie(x,0);
System.out.println((x-1) + "的排列共有" + i.cnt + "种!");
}
}
2.用递归解决,关键是上层函数的计算结果要保留到下层函数中。
CODE:
public class SplitInt
{
static int cnt=1;
//hs:上层函数已经分解完毕的数字串;m:上层函数分解完毕的数字;n:本层函数正在分解的数字
//例如m=2,n=3,表示上层函数已经把5这个数字分解出2了,把5-2=3这个数字传给本层分解
void split(String hs,int m,int n)
{
for(int i=m;i<=n/2;i++)
{
split("+"+i+hs,i,n-i);
System.out.println((cnt++)+":"+(n-i)+"+"+i+hs);
}
};
public static void main(String[] args)
{
int num=6;
new SplitInt().split("",1,num);
}
}
结果如下:
1:1+1+1+1+1+1
2:2+1+1+1+1
3:3+1+1+1
4:2+2+1+1
5:4+1+1
6:3+2+1
7:5+1
8:2+2+2
9:4+2
10:3+3
这个代码的特点是代码行少,简单。但是理解起来可能有点复杂。
分享到:
相关推荐
// 给定一个正整数N, 其中 // N = A1 + A2 + ... + An 其中A1, A2, ..., An为斐波那契数列不重复的正整数 (不会有 2个1 这种结果) // 请实现下面的function (function格式请勿修改) // 其中输入参数为N, 返回值为A1,...
在编程领域,将一个正整数分解质因数是一项基础且重要的任务,它涉及到数论和算法设计。质因数分解是将一个大于1的正整数表示为若干个质数(只有1和自身两个正因数的自然数)的乘积,这种表示方式是唯一的。例如,28...
Java实现正整数分解质因数的例子。如果数学好,相信这个代码不会难。在本例子中,输入90,打印出90=2*3*3*5。解题思路和方法:对n分解质因数,需要先找到一个最小的质数k,然后按下述步骤完成: (1)如果这个质数恰...
大于1 的正整数n可以分解为:n=x1*x2*…*xm。 算法设计: 对于给定的正整数n,编程计算n共有多少种不同的分解式。 例如,当n=12 时,共有8 种不同的分解式: 12=12; 12=6*2; 12=4*3; 12=3*4; 12=3*2*2; 12=2*6...
在编程领域,特别是Java语言中,正整数的质因数分解是一项常见的任务。质因数分解是指将一个正整数表示为若干个质数的乘积,这有助于理解和简化数学问题,也是密码学和计算理论的基础。在这个例子中,我们看到一个...
大于1的正整数 n 都可以分解为 n = x1 * x2 * ... * xm 例如:当n=12时,共有8种不同的分解式: 12 = 12 12 = 6*2 12 = 4*3 12 = 3*4 12 = 3*2*2 12 = 2*6 12 = 2*3*2 12 = 2*2*3 对于给定正整数n,计算n共有多少...
这是关于整数的划分问题的算法的c++代码,整数划分:如5可以分解为1 4 2 3,里边有各个步骤的说明,利于参考学习。
整数分解是数论中的一个基本问题,指的是将一个正整数表示成若干个正整数的乘积。例如,给定一个正整数\( n \),我们需要找出所有可能的形式 \( n = X_1 \times X_2 \times \ldots \times X_m \),其中 \( X_i \) 也...
大于1 的正整数n可以分解为:n=x1*x2*…*xm。 算法设计: 对于给定的正整数n,编程计算n共有多少种不同的分解式。 例如,当n=12 时,共有8 种不同的分解式: 12=12; 12=6*2; 12=4*3; 12=3*4; 12=3*2*2; 12=2*6...
主要介绍了Python实现将一个正整数分解质因数的方法,结合实例形式对比分析了Python计算正整数分解质因数的算法逐步改进操作技巧,需要的朋友可以参考下
整数因子分解是数论中的一个基础而重要的问题,其核心在于寻找一个大于1的正整数n的所有可能的因子分解方式。因子分解的目的是将给定的正整数n表达为若干个较小正整数的乘积,这些较小正整数则被称为n的因子。这一...
在编程领域,分解质因子是计算科学中的一个重要概念,它涉及到将一个正整数表示为若干个质数的乘积。在C#中实现这个功能,可以帮助我们理解数字的结构,尤其是在加密算法、数论或者数学问题求解等方面。下面我们将...
总的来说,这个项目提供了一个用C#实现的高效二次整数分解算法,对于理解和应用整数分解有很好的学习价值。无论是对于密码学研究,还是在开发需要处理大数分解的软件(如加密系统)中,这种技术都有着重要的作用。...
整数因子分解问题:给定正整数n,编写递归算法,计算n共有多少种不同的分解式,并输出这些分解式。
在压缩包文件"prime"中,可能包含的是C#实现的代码示例或测试数据,通过分析这些代码,我们可以更深入地了解这个二次整数分解算法的具体实现细节,例如如何优化搜索过程,如何处理负数和偶数,以及如何处理特例等。...
理解并熟练掌握质因数分解算法对于提升编程技能和解决实际问题至关重要。此外,了解不同算法的性能特点,比如循环与递归的效率对比,也是优化代码和提高程序运行速度的关键。 最后,文中提到的在线计算工具,如分解...
Description 大于1的正整数 n 都可以分解为 n = x1 * x2 * ... * xm, 每个xi为大于1的因子,即1。 例如:当n=12时,共有8种不同的分解式: 12 = 12 12 = 6*2 12 = 4*3 12 = 3*4 12 = 3*2*2 12 = 2*6 12 = 2*3*2 12...
最优分解问题是一个经典的数学优化问题,它涉及到如何有效地将一个正整数n分解为若干个互不相同的自然数之和,以使得这些自然数的乘积最大化。这个问题在计算机科学和算法设计中有着广泛的应用,特别是在寻找高效...