有一个数组,假设是{2,3}。。那么他的子集数包括{2}{3}{2,3},这个称为子包。每个子包的数据和是2,3,5.他们都是素数,那就叫素数包。现在设计个程序,入口是数组,出口是数字(素数包的个数)。 
就是求一个数组拆解后能有多少个素数包

解决方案 »

  1.   

    劣质代码,抛砖引玉
    public class Test {    public static void main(String[] args) {
            int[] array = {2, 3, 4, 5,6};
            System.out.println(test(array));
            System.out.println();
            array = new int[]{2, 3};
            System.out.println(test(array));
        }    public static int test(int[] array) {
            int result = 0;
            int limit = (int) Math.pow(2, array.length);
            for (int i = 1; i < limit; i++) {
                int sum = 0;
                for (int j = 0; j < array.length; j++) {
                    int num = i >> j;
                    if ((num & 1) != 0) {
                        sum += array[j];
                    }
                }
                if (checkPrim(sum)) {
                    System.out.println(sum);
                    result++;
                }
            }
            return result;
        }    public static boolean checkPrim(int number) {
            for (int i = 2; i * i <= number; i++) {
                if (number % i == 0) {
                    return false;
                }
            }
            return true;
        }
    }
      

  2.   

    http://blog.csdn.net/ZangXT/archive/2009/09/22/4582048.aspx
      

  3.   

    顶一下二楼.int limit = (int) Math.pow(2, array.length);
    可以改为:int limit=1<<array.length;
      

  4.   


    public class Test
    {
    public static void main(String[] args)
    {
    int[] data = {1,2,3,4};
    int count = 0;

    for(int i = 0;i < data.length;i++)
    {
    for(int j = i;j < data.length;j++)
    {
    int result = 0;
    boolean flag = true;
    for(int k = i;k <= j;k++)
    {
    System.out.print(data[k]);
    result += data[k];
    System.out.print("\t");
    }
    System.out.println();
    for(int t = 2;t < result;t++)
    {
    if(result % t == 0)
    {
    flag = false;
    }
    }
    if(flag)
    {
    count++;
    }
    }
    }
    System.out.println("count = " + count);
    }
    }