选数.cpp 682 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. #include<cstdio>
  2. #include<iostream>
  3. #include<cmath>
  4. using namespace std;
  5. int n,k;
  6. int a[10000];
  7. int sum=0;
  8. int ans=0;
  9. int isPrime(int n)
  10. {
  11. if(n==1||n==0)
  12. return 0;
  13. int m = (int)sqrt(n);
  14. for(int i=2 ; i <= m ; i++)
  15. if(n%i==0)
  16. return 0;
  17. return 1;
  18. }
  19. void dfs(int step,int i)
  20. {
  21. int j;
  22. if(step>k)
  23. {
  24. if(isPrime(sum))
  25. ans++;
  26. return ;
  27. }
  28. for(j=i;j<=n;j++)
  29. {
  30. sum=sum+a[i];
  31. dfs(step+1,j+1);
  32. sum=sum-a[i];
  33. }
  34. }
  35. int main()
  36. {
  37. int i;
  38. //freopen("10.in", "r", stdin);
  39. //freopen("10.out", "w", stdout);
  40. cin>>n>>k;
  41. for(i=1;i<=n;i++)
  42. {
  43. cin>>a[i];
  44. }
  45. dfs(1,1);
  46. cout<<ans<<endl;
  47. return 0;
  48. }