#include <iostream>
#include <vector>
using namespace std;
vector<size_t> ans;
int main(){
size_t n,*dp;
bool *judge;
cin>>n;
judge=new bool[n+1]{0};
dp=new size_t[n+1]{1};
for(size_t i=2;i<=n;i++){
if(!judge[i]) ans.push_back(i);
for(size_t j=0,end=(size_t)n/i;ans[j]<=end;j++){
judge[i*ans[j]]=true;
if(!i%ans[j]) break;
}
}
delete[] judge;
for(size_t val:ans)
for(size_t i=val;i<=n;i++)
dp[i]+=dp[i-val];
cout<<dp[n]<<endl;
delete[] dp;
return 0;
}//原始代码
是八个RE。
#include <iostream>
#include <vector>
using namespace std;
vector<size_t> ans;
int main(){
size_t n,*dp;
size_t *judge;
//把bool改成size_t
cin>>n;
judge=new size_t[n+1]{0};
dp=new size_t[n+1]{1};
for(size_t i=2;i<=n;i++){
if(!judge[i]) ans.push_back(i);
for(size_t j=0,end=(size_t)n/i;ans[j]<=end;j++){
judge[i*ans[j]]=true;
if(!i%ans[j]) break;
}
}
delete[] judge;
for(size_t val:ans)
for(size_t i=val;i<=n;i++)
dp[i]+=dp[i-val];
cout<<dp[n]<<endl;
delete[] dp;
return 0;
}
就AC了
各位知道为什么吗?
求大佬解答!!!