日期:2014-05-20  浏览次数:20696 次

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

------解决方案--------------------
劣质代码,抛砖引玉
Java code


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;
    }
}