给出n个数,任意选出k个数,判断k个数的和是否为素数。
暴力解会报错,就用了递归。
package 普及减;
import java.util.Scanner;
public class p1036 {
public static long n,k;
public static long ans;
public static long a[]=new long[20];
public static boolean p(long sum) {//判断和是否为素数
if(sum==1) {
return false;
}else if(sum==2||sum==3) {
return true;
}
for(long i=2;i<=Math.sqrt(sum);i++){
if(sum%i==0) {
return false;
}
}
return true;
}
public static void S(int start,long count,long sum) {//start表示开始,count表示次数最多为k,sum表示和
if(count==k&&p(sum)) {
ans++;
}
for(int i=start;i<=n;i++) {
S(i+1,count+1,sum+a[i]);
}
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
n=sc.nextInt();
k=sc.nextInt();
for(int i=1;i<=n;i++) {
a[i]=sc.nextInt();
}
S(1,0,0);//用方法
System.out.println(ans);
}
}