#include <bits/stdc++.h>
using namespace std;
long long dp[1005];
bool vis[1005];
int p[1005];
int main()
{
int n;
cin>>n;
vis[0]=vis[1]=1;
int cnt=1;
for(int i=2;i<=n;i++)
{
if(!vis[i])
{
p[cnt]=i;
cnt++;
}
for(int j=1;j<=cnt;j++)
{
if(i*p[j]>n) break;
vis[i*p[j]]=1;
if(i%p[j]==0) break;
}
}
dp[0]=1;
for(int i=1;i<=cnt;i++)
{
for(int j=p[i];j<=n;j++)
{
dp[j]+=dp[j-p[i]];
}
}
cout<<dp[n]/2;
return 0;
}
为什么在这种计算方案数的方法中,比如5=2+3 又被重复计算了5=3+2?