1 条题解
-
0
自动搬运
来自洛谷,原作者为

hmh13951417981
这个蒟蒻很懒,什么都没留下搬运于
2025-08-24 21:30:50,当前版本为作者最后更新于2019-02-18 22:20:51,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
思想贴上:
既然说要都用素数,必须先筛出素数
如果是素数,就要判断是否取
每个素数可以无限取-->完全背包
记得结果会很大一定要开long long
#include<bits/stdc++.h> using namespace std; int i,j,n; long long dp[1001];//dp数组存储第i个数的组成种数 bool b[1001];//b数组判断是否为素数 void prime(){ for(i=2;i<=500;i++) if(!b[i]) for(j=2;i*j<=1000;j++) b[i*j]=1; }//筛法 int main() { prime();//预处理,筛出素数 cin>>n;//输入 //完全背包经典代码 dp[0]=1;//边界值:当取数和为0时值为1 for(i=2;i<=n;i++)//循环每个数取或不取 if(!b[i])//是素数才能考虑是否能取 for(j=i;j<=n;j++)//从i开始到n,因为你要得到的数肯定不小于取的数 dp[j]+=dp[j-i];////取这个素数,则减去这个素数方案数累加到总方案数 cout<<dp[n];//输出n的方案数 return 0; }
- 1
信息
- ID
- 802
- 时间
- 1000ms
- 内存
- 125MiB
- 难度
- 2
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者