给出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); } }