`
standalone
  • 浏览: 596025 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

正整数分解算法

    博客分类:
  • c++
阅读更多

问题:将以正整数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,...

    Java 正整数分解质因数算法示例.rar

    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...

    整数因子分解问题(分治法\C++实现)

    大于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共有多少...

    Integer Factorization 对于给定的正整数n,编程计算n共有多少种不同的分解式。

    大于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...

    整数因子分解问题 问题描述

    大于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...

    整数划分问题 将正整数n表示成一系列正整数之和:n=n1+n2+…+nk,其中n1≥n2≥…≥nk≥1,k≥1。

    将正整数n表示成一系列正整数之和:n=n1+n2+…+nk,其中n1≥n2≥…≥nk≥1,k≥1。 正整数n的这种表示称为正整数n的划分。求正整数n的不同划分个数。 例如正整数6有如下11种不同的划分: 6; 5+1; 4+2,4+1+1...

    Python实现将一个正整数分解质因数的方法分析

    本文实例讲述了Python实现将一个正整数分解质因数的方法。分享给大家供大家参考,具体如下: 遇到一个python编程联系题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。 版本一: 开始,没动脑子就开始...

    整数因子分解源码

    整数因子分解问题:给定正整数n,编写递归算法,计算n共有多少种不同的分解式,并输出这些分解式。

    整数因子分解

    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...

    Java实现将一个正整数分解质因数

    * 题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。  * 分析:对n进行分解质因数,应先找到一个小的质数k,然后按下述步骤完成:  *(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,...

    整数因子分解问题

    大于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分解为若干个互不相同的自然数的和,且使这些数的乘积最大。

    Python实现正整数分解质因数操作示例

    本文实例讲述了Python实现正整数分解质因数操作。分享给大家供大家参考,具体如下: 遇到一个Python编程练习题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。 #!/usr/bin/env python # -*- coding: ...

    质因数分解算法例如90=2*3*3*5

    质因数分解算法例如90=2*3*3*5 java实现

    整数划分输出每一项

    指把一个正整数n写成多个大于等于1且小于等于其本身的整数的和,则其中各加数所构成的集合为n的一个划分。这是一个典型的递归算法。

    (数据结构与算法)两个大整数相加

    (数据结构与算法)两个大整数相加 http://blog.csdn.net/eeeduo/article/details/37877179

    寻找正整数的素数因子的新算法 (2004年)

    运用新方法开发了正整数的素数分解的算法,并对其进行了算法分析。

    10个简单的java算法

    3.正整数分解质因数。4.求100-200之间的素数(只能被1和自身整除),并输出。5.非波拉契数列问题。6.sum=a+aa+aaa+aaaa+...7.给一个不多于5位的正整数,求是几位数,并逆序打印各个数字8.排序9.杨辉三角10.n个人围成圈...

Global site tag (gtag.js) - Google Analytics