题目描述
已知 n 个整数b1,b2,…,bn
以及一个整数 k(k<n)。
从 n 个整数中任选 k 个整数相加,可分别得到一系列的和。
例如当 n=4,k=3,4 个整数分别为 3,7,12,19 时,
可得全部的组合与它们的和为:
3+7+12=223+7+19=297+12+19=383+12+19=34。
现在,要求你计算出和为素数共有多少种。
例如上例,只有一种的和为素数:3+7+19=29。
输入
第一行两个整数:n , k (1<=n<=20,k<n)
第二行n个整数:x1,x2,…,xn (1<=xi<=5000000)
输出
一个整数(满足条件的方案数)。
样例输入
43371219
样例输出
1
import java.util.Scanner;publicclassMain1{staticint n;staticint k;staticint[] book;//标记是否以用staticint[] rang;//存放n个数staticint[] arr;//存放结果 从index = 1开始存放staticint count;//储存结果staticint sum;//三个数的和//判断是否为质数publicstaticbooleanisOK(int num){for(int i =2; i < num; i++){if( num%i ==0)returnfalse;}returntrue;}//len = 1开始publicstaticvoiddfs(int len){//结束条件if( len == k +1){if(isOK(sum)){
count++;//打印结果 for(int i =1; i < arr.length; i++)
System.out.print(arr[i]+" ");
System.out.print("总数和为:"+sum);
System.out.println();}return;}for(int i =1; i < rang.length; i++){//剪纸if(book[i]==0&& rang[i]> arr[len-1]){
sum = sum + rang[i];
arr[len]= rang[i];dfs(len+1);
sum = sum - rang[i];//有加就有剪}}}publicstaticvoidmain(String[] args){
Scanner in =newScanner(System.in);
n = in.nextInt();
k = in.nextInt();
rang =newint[n+1];
book =newint[n+1];
arr =newint[k+1];
count =0;
sum =0;for(int i =1; i < rang.length; i++){
rang[i]= in.nextInt();
book[i]=0;}dfs(1);
System.out.println(count);}}