打卡信奥刷题(235)用C++工具信奥P1832[普及组/提高] A+B Problem(再升级)

A+B Problem(再升级)

题目背景

题目名称是吸引你点进来的。

实际上该题还是很水的。

题目描述

  • 1+1=?1+1=?1+1=? 显然是 222
  • a+b=?a+b=?a+b=? P1001 回看不谢。
  • 哥德巴赫猜想 似乎已呈泛滥趋势。

以上纯属个人吐槽

给定一个正整数 nnn,求将其分解成若干个素数之和的方案总数。

输入格式

一行一个正整数 nnn

输出格式

一行一个整数表示方案总数。

样例 #1

样例输入 #1

7

样例输出 #1

3

样例 #2

样例输入 #2

20

样例输出 #2

26

提示

样例解释

存在如下三种方案:

  • 7=77=77=7
  • 7=2+57=2+57=2+5
  • 7=2+2+37=2+2+37=2+2+3

数据范围及约定

  • 对于 30%30\%30% 的数据 1≤n≤101\le n\le 101n10
  • 对于 100%100\%100% 的数据,1≤n≤1031\le n\le 10^31n103

C++实现

#include
#include
using namespace std;
int f[1010];
int n,ans=0;
bool zhu(int i){
if(i2)return true;
for(int j=2;j<=sqrt(i);j++){
if(i%j
0)return false;
}
return true;
}
void dfs(int i,long long sum){
if(sum>n)return;
if(sum==n){
ans++;return;}
else for(int j=i;j<=n-sum;j++){
if(f[j])dfs(j,sum+j);
}
}
int main(){
cin>>n;
for(int i=2;i<=n;i++){
if(zhu(i))f[i]=true;
}
dfs(1,0);
cout<<ans<<endl;
}

在这里插入图片描述
接下来我会不断用C++来实现信奥比赛中的算法题、GESP考级编程题实现、白名单赛事考题实现,记录日常的编程生活、比赛心得,感兴趣的请关注,我后续将继续分享相关内容

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值