CQOJ921B素数和
2024-10-07 08:05:16
这是用一道搜索(全排列)实现的一个数论题目。今天周六,上了一天信息,没写数学的我瑟瑟发抖。
首先题意为给定n个数,选取k个数进行求和,输出和为素数的方案数。在写判断素数函数时,我们只需要把i枚举到根下x即可,这一点可以证明。在写全排列列时,由于我们需要枚举的是和,所以不需要再考虑顺序了,要用到三个变量(int now,int step,int sum){表示当前枚举到第几个,当前有几个数,当前的和,生成一种排列后直接判断即可。另lyx tql
1.牢记素数判断优化。
2.想搜索的过程中需要几个变量记录状态。
代码
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
#define maxn 21
using namespace std;
int n,k;
int a[];
int ans=;
bool judge(int x){
if(x==) return true;
for(int i=;i*i<=x;i++){
if(x%i==) return false;
}
return true;
}
void dfs(int now,int step,int sum){//当前枚举到第几个,当前有几个数,当前的和
if(step==k){
if(judge(sum)) ans++;
return;
}
for(int i=now+;i<=n;i++){
dfs(i,step+,sum+a[i]);
}
}
int main(){
cin>>n>>k;
for(int i=;i<=n;i++){
cin>>a[i];
}
dfs(,,);
cout<<ans;
return ;
}
最新文章
- 用Fmx调用Bass.dll
- 在页面头部<;!DOCTYPE html ....>; 前面不能有任何输出
- Android studio -VSN 使用笔记
- NHibernate和 FluentNHibernate
- mobile 更改hosts
- shell编程的一些例子2
- jquery 使用方式记录
- ubuntu下管理android手机
- 转: linux文件链接(软链接和硬链接)
- CCIE-MPLS VPN-实验手册(中卷)
- 使用idea搭建Scala 项目
- javap -v没有显示LocalVaribleTable
- ARC 086 E - Smuggling Marbles(dp + 启发式合并)
- cf455C Civilization (并查集)
- pkill命令详解
- [洛谷P5081]Tweetuzki 爱取球
- while(std::cin>;>;val)怎么结束的思考
- DPDK
- linux 模拟生成 CAN 设备
- 黄聪:WordPress 多站点建站教程(一):怎样开启WordPress多站点功能,实现手机移动端主题开发,与主站用户数据共享