P1036 [NOIP2002 普及组] 选数
P1036 [NOIP2002 普及组] 选数
枚举每一种选数并进行素数的判断,计数。
//P1036 选数 #includeusing namespace std; long long ans=0; int a[21]; int n,k; //判断素数 int isprime(int x) { if (x<2) return 0; for (int i=2;i*i<=x;i++) { if (x%i==0) return 0; } return 1; } //k表示选择的个数,p当前是第几个数,sum:当前所选择数的和 void dfs(int k,int p,int sum) { if (!k) { ans+=isprime(sum); return ; } for (p;p<=n;p++) dfs(k-1,p+1,sum+a[p]); } int main() { cin>>n>>k; for (int i=1;i<=n;i++) { cin>>a[i]; } dfs(k,1,0); cout<