菜鸟经过仔细分析可以发现这是一道暴力深搜的模板题(大佬可能一眼就看出来了),废话不多说,直接上代码。
import java.util.Scanner;
class Main {
static int count=0;
public static int check(int sum)
{
int i;
for (i=2; i*i<=sum; i++)
{
if (sum%i == 0)
{
return 0;
}
}
return 1;
}
public static void dfs(int a[], int i, int sum,int num,int n,int k) { //针对每一个数,都有选或者不选的选项。选择为1,不选为0
if ( num == k){
if(check(sum)==1)
count++;
return ;
}
if(i > n-1)
return ;
dfs(a, i + 1, sum,num,n,k); //这是不选的情况
dfs(a, i + 1, sum + a[i],num+1,n,k); //这是选择的情况
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int k = scanner.nextInt();
int[] a;
a=new int[n];
for(int i=0;i<n;i++)
a[i]= scanner.nextInt();
dfs(a,0,0,0,n,k);
System.out.printf("%d\n",count);
}
}