题目地址
解析可以看另一篇题解
PERKET
下面上AC代码
import java.util.*;
import java.math.*;
public class Main {
public static List<Integer> list=new ArrayList<Integer>();
public static int res=0;
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int k=sc.nextInt();
int[] nums=new int[n];
for(int i=0;i<n;i++)
nums[i]=sc.nextInt();
dfs(nums,0,k);
System.out.println(res);
}
public static void dfs(int[] nums,int n,int k){
int len=nums.length;
if(list.size()==k){
int cur=0;
for(Integer i:list)
cur+=i;
if(isPrime(cur)==1)
res++;
return;
}
if(list.size()+len-n+1<k||n==len)
return;
list.add(nums[n]);
dfs(nums,n+1,k);
list.remove(new Integer(nums[n]));
dfs(nums,n+1,k);
}
public static int isPrime(int n){
if(n==1)
return 0;
if(n==2||n==3)
return 1;
if(n%6!=1&&n%6!=5)
return 0;
for(int i=5;i<=Math.sqrt(n);i+=6){
if(n%i==0||n%(i+2)==0)
return 0;
}
return 1;
}
}