题目背景
·题目名称是吸引你点进来的
·实际上该题还是很水的
题目描述
·1+1=? 显然是2
·a+b=? 1001回看不谢
·哥德巴赫猜想 似乎已呈泛滥趋势
·以上纯属个人吐槽
·给定一个正整数n,求将其分解成若干个素数之和的方案总数。
输入输出格式
输入格式:一行:一个正整数n
输出格式:一行:一个整数表示方案总数
输入输出样例
说明
【样例解释】
7=7 7=2+5
7=2+2+3
【福利数据】
【输入】 20
【输出】 26
【数据范围及约定】
对于30%的数据 1<=n<=10
对于100%的数据,1<=n<=10^3
晒法+完全背包。。。
推荐线性筛。。。
注意 开long long 。。。
附代码:
#include<iostream>
#include<algorithm>
#include<cstdio>
#define MAXN 1010
using namespace std;
int n,a[MAXN];
long long f[MAXN];
inline int read(){
int date=0,w=1;char c=0;
while(c<'0'||c>'9'){if(c=='-')w=-1;c=getchar();}
while(c>='0'&&c<='9'){date=date*10+c-'0';c=getchar();}
return date*w;
}
void make(){
int k=0,m=MAXN;
bool np[MAXN];
for(int i=2;i<m;i++){
if(!np[i])a[++k]=i;
for(int j=1;j<=k&&a[j]*i<m;j++){
np[a[j]*i]=true;
if(i%a[j]==0)break;
}
}
}
int main(){
n=read();
make();
f[0]=1;
for(int i=1;a[i]<=n;i++)
for(int j=a[i];j<=n;j++)
f[j]+=f[j-a[i]];
printf("%lld\n",f[n]);
return 0;
}