#include<cstdlib> #include<cstdio> #include<iostream> #include<cmath> #include<cstring> using namespace std; long long b[10000],n,k,tot,sum,a[1000],c[1000]; bool pd(int y) { if(y==1) return false; for(int i=2;i<=sqrt(y)+1;i++) if(y%i==0) return false; return true; } void search(int x,int y,int j) { if(x>=k) { if(pd(y)) tot++; return ; }//判断是否为素数; for(int i=j+1;i<=n;++i) search(x+1,y+a[i],i);//y所选n个数的和,x已选数的个数,j将要选的数的位置; return; } int main() { scanf("%d%d",&n,&k); for(int i=1;i<=n;++i) scanf("%d",&a[i]); search(0,0,0); printf("%d",tot); return 0; }
递归解决问题