fork download
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. vector<int > p;
  4. void pri()
  5. {
  6. int i,j,a[1121]={0};
  7. for(i=2;i<1121;i++)
  8. for(j=i+i;j<1121;j+=i)
  9. a[j]=1;
  10. for(i=2;i<1121;i++)
  11. if(!a[i]) p.push_back(i);
  12. return;
  13. }
  14. long long int a[188][1121][15],v[188][1121][15];
  15. int k,n;
  16. long long int rec(int i,int r,int c)
  17. {
  18. if(v[i][r][c]) return(a[i][r][c]);
  19. if(r<0) return(0);
  20. if(r==0&&c==k) return(1);
  21. if(c==k) return(0);
  22. if(i==n) return(0);
  23. v[i][r][c]=1;
  24. return(a[i][r][c]=rec(i+1,r,c)+rec(i+1,r-p[i],c+1));
  25. }
  26. int main()
  27. {
  28. pri();
  29. n=p.size();
  30. int r,i,j;
  31. while(1)
  32. {
  33. cin>>r>>k;
  34. if(!r&&!k) break;
  35. memset(a,0,sizeof(a));memset(v,0,sizeof(v));
  36. cout<<rec(0,r,0)<<endl;
  37. }
  38. }
  39.  
Success #stdin #stdout 0.23s 52932KB
stdin
24 3 24 2 2 1 1 1 4 2 18 3 17 1 17 3 17 4 100 5 1000 10 1120 14 0 0
stdout
2
3
1
0
0
2
1
0
1
55
6975836544
1231735147939