题目描述

已知 n 个整数x1​,x2​,…,xn​,以及1个整数k(k<n)。从n个整数中任选k个整数相加,可分别得到一系列的和。例如当n=4,k=3,4个整数分别为3,7,12,19时,可得全部的组合与它们的和为:

3+7+12=22

3+7+19=29

7+12+19=38

3+12+19=34

现在,要求你计算出和为素数共有多少种。

例如上例,只有一种的和为素数:3+7+19=29。

输入输出格式

输入格式:

 

键盘输入,格式为:

n,k(1≤n≤20,k<n)

x1​,x2​,…,xn​(1≤xi​≤5000000)

 

输出格式:

 

屏幕输出,格式为: 1个整数(满足条件的种数)。

 

输入输出样例

输入样例#1: 复制

4 3
3 7 12 19

输出样例#1: 复制

1
import java.util.*;
public class Main {
	static int ans=0;
	static Scanner in=new Scanner(System.in);
	static int n=in.nextInt();
	static int k=in.nextInt();
	static int a[]=new int[n+2];
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		for(int i=0;i<n;i++)
		{
			a[i]=in.nextInt();			
		}

		dfs(0,k,0);
		
		System.out.println(ans);
	}
static int c=0;
	private static void dfs(int sum,int choo,int now) {
		if(n-now<choo)return;
		if(choo==0){		
			
			if(is_prime(sum)==1){

				ans++;				
			}
			return ;
		}
		
		
			dfs(sum+a[now],choo-1,now+1);
			dfs(sum,choo,now+1);
			
			
		
	}

	private static int is_prime(int sum) {
		// TODO Auto-generated method stub
		if(sum==1)return 0;
		for(int i=2;i*i<=sum;i++)
			if(sum%i==0)
				return 0;
		return 1;
	}

}