例如:8=2+2+2+2 8=5+3 8=2+3+3 3种
      12=5+7,12=2+2+5+3 12=2+5+5  3种

解决方案 »

  1.   

    随手写的。不知道对不对public int f(int num) {
      if(num == 0) {
        return;
      }
      for(int i = 0;i<num;i++) {
         if(isPrime(i)) {
            print("" + i + " + "+ f(num-i)); 
         }
      }
    }
    private boolean isPrime(int number) {
        //检查number 是不是素数。
        
    }
      

  2.   

    我的思路也是这样,可是实现的时候却不对,下面是我的代码,望大虾们指点
    public class Main{
    static int sum=0;
    public boolean Prime(int n){
    int flag=0,i;
    if(n==2)flag=1;
    for(i=2;i<n;i++){
    if(n%i==0)
    {
    flag=0;break;
    }
    flag=1;
    }
            if((flag==1)&&(i>=n))return true;
            else
    return false;
    }
    public void Cal(int n){
    if(n==0) sum=sum+1;
    for(int i=0;i<=n;i++){
                  if(Prime(i))
                  {
                   n=n-i;
                   Cal(n);
                  }
    }
    }
    public static void main(String args[]){
    Main t=new Main();
            t.Cal(8);
            System.out.println(sum);

    }
    }
      

  3.   

    测试了下,应该可以:/*
     * 把一个正整数M拆分成几个质数的和,求一共多少种拆法
     */
    public class NumberSplit {

    //定义总共可以拆分的数量num
    private static int num = 0; public static void main(String[] args) {
    int m = 9;
    int sum = 0;
    divide(2, m, sum);

    //如果m是质数,则需要减去一种
    if(isPrime(m)){
    num--;
    }
    System.out.printf("num=%d\n", num);
    }

    //从Start开始,拆出为两个数,sum表示这两个数的和
    public static void divide(int start, int m, int sum) {
    //如果两个数和为m,则为一种成功的拆分法
    if (m == sum) {
    num++;
    } else {
    //从start开始,在m-sum之中任取一个数
    for (int i = start; i <= m-sum; i++) {
    /*
     * 如果这个数是质数,继续拆分除去这个数之后的m,
     * 拆分完将sum返回原来值,继续下一个数的拆分
     */

    if (isPrime(i)) {
    sum += i;
    divide(i, m, sum);
    sum -= i;
    }
    }
    }
    } public static boolean isPrime(int number) {
    boolean flag = true;
    for (int i = 2; i <= Math.sqrt(number); i++) {
    if (number % i == 0) {
    flag = false;
    }
    }
    return flag;
    }}
    这代码只能求出可分解的总数,不能打印每一个分解的数据
    测试结果:
    m=8,输出3:
    8=2+2+2+2
    8=2+3+3
    8=2+5m=9,输出4:
    9=2+2+2+3
    9=2+2+5
    9=2+7
    9=3+3+3m=12,输出7
    12=2+2+2+2+2+2
    12=2+2+2+3+3
    12=2+2+3+5
    12=2+3+7
    12=2+5+5
    12=3+3+3+3
    12=5+7
      

  4.   

    就是对于一个数m,从2~m,每次遇到一个质数i,就把后面的数继续按2~m-i按这个规律继续拆,最后拆出来的所有数如果满足质数条件,就是一种解法