这是用一道搜索(全排列)实现的一个数论题目。今天周六,上了一天信息,没写数学的我瑟瑟发抖。

首先题意为给定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 ;
}

最新文章

  1. 用Fmx调用Bass.dll
  2. 在页面头部&lt;!DOCTYPE html ....&gt; 前面不能有任何输出
  3. Android studio -VSN 使用笔记
  4. NHibernate和 FluentNHibernate
  5. mobile 更改hosts
  6. shell编程的一些例子2
  7. jquery 使用方式记录
  8. ubuntu下管理android手机
  9. 转: linux文件链接(软链接和硬链接)
  10. CCIE-MPLS VPN-实验手册(中卷)
  11. 使用idea搭建Scala 项目
  12. javap -v没有显示LocalVaribleTable
  13. ARC 086 E - Smuggling Marbles(dp + 启发式合并)
  14. cf455C Civilization (并查集)
  15. pkill命令详解
  16. [洛谷P5081]Tweetuzki 爱取球
  17. while(std::cin&gt;&gt;val)怎么结束的思考
  18. DPDK
  19. linux 模拟生成 CAN 设备
  20. 黄聪:WordPress 多站点建站教程(一):怎样开启WordPress多站点功能,实现手机移动端主题开发,与主站用户数据共享

热门文章

  1. Arduino连接MPU6050陀螺仪
  2. DOM自定义属性操作
  3. 用JavaServiceWrapper将JAVA程序发布成Windows服务
  4. Jprofiler远程监控JVM
  5. 大数据笔记(三十一)——SparkStreaming详细介绍,开发spark程序
  6. 5-1 Django的路由层(urlconf)
  7. java跨越请求实例
  8. 本地运行aws lambda credential 配置 (missing credential config error)
  9. JAVA周二学习总结
  10. Java第一次学习总结