素数环-蓝桥杯

简介: 素数环-蓝桥杯

题目描述


有一个整数 n,把从 1 到 n 的数字无重复的排列成环,且使每相邻的两个数(包括首和尾)的和都为素数,称为素数环。为了简便起见,我们规定每个素数环都从 1 开始。例如,6 的一个素数环:1 4 3 2 5 6

请编写一个程序,给定一个输入 nn ,如果存在满足要求的素数环,从小到大输出。否则,输出 No Answer


输入描述


输入整数 n,0<n<20


输出描述


如果存在满足要求的素数环,从小到大输出。否则,输出 No Answer


样例">样例">样例">样例">样例">样例">输入输出样例


示例


输入

8

输出

1. 1 2 3 8 5 6 7 4
2. 1 2 5 8 3 4 7 6
3. 1 4 7 6 5 8 3 2
4. 1 6 7 4 3 8 5 2

运行限制


  • 最大运行时间:1s
  • 最大运行内存: 128M

思路:

如果n为奇数时,任何一种全排列中必有两个奇数相邻,两个数的和为偶数,不是素数,直接返回“no answer”

采用深度优先搜索的方法得到全排列,设计判别是否为素数的函数判断当前的数和前一轮的数之和是否为素数,用这样的方法进行剪枝。

代码:


1. using namespace std;
2. #include<cmath>
3. #include<iostream>
4. const int N=22;
5. int vis[N];
6. int c[N]; 
7. int n;
8. int ans=0;
9. 
10. int is_prime(int x){
11. if(x<=1) return 0;
12. for(int i=2;i*i<=x;i++){
13. if(x%i==0){
14. return 0;
15.         }
16.     }
17. return 1;
18. }
19. 
20. void dfs(int cur){
21. if(cur==n && is_prime(c[0]+c[n-1])){
22.         ans++;
23. for(int i=0;i<n;i++) cout<<c[i]<<" ";
24.         cout<<endl;
25. return;
26.     }
27. for(int i=2;i<=n;i++){
28. if(!vis[i] && is_prime(i+c[cur-1])){
29.             vis[i]=1;
30.             c[cur]=i;
31.             dfs(cur+1);
32.             vis[i]=0;
33.         }
34.     }
35. }
36. 
37. 
38. int main(){
39.     cin>>n;
40.     c[0]=1;
41. if(n&1){
42.         cout<<"No Answer"<<endl;
43.     }
44. else{
45.         dfs(1);
46. if(ans=0)
47.             cout<<"No Answer"<<endl;
48.     }
49. return 0;
50. }
目录
相关文章
|
安全
公网IP和私网IP
公网IP和私网IP
1025 1
|
算法 JavaScript Java
使用强大的离线IP地址定位库ip2region获取城市信息
ip2region - 准确率99.9%的离线IP地址定位库,0.0x毫秒级查询,ip2region.db数据库只有数MB,提供了java、php、c、python、nodejs、golang、c#等查询绑定和Binary,B树,内存三种查询算法。
使用强大的离线IP地址定位库ip2region获取城市信息
|
存储 NoSQL 关系型数据库
数据库管理系统
【10月更文挑战第8天】
572 1
|
存储 索引
【数据结构】HashSet的底层数据结构
【数据结构】HashSet的底层数据结构
484 2
|
开发工具 Android开发 git
Android实战之组件化中如何进行版本控制和依赖管理
本文介绍了 Git Submodules 的功能及其在组件化开发中的应用。Submodules 允许将一个 Git 仓库作为另一个仓库的子目录,有助于保持模块独立、代码重用和版本控制。虽然存在一些缺点,如增加复杂性和初始化时间,但通过最佳实践可以有效利用其优势。
167 3
|
JavaScript 前端开发
vue实现登录界面
vue实现登录界面
321 0
|
机器学习/深度学习 算法 Linux
xenomai内核解析--实时内存管理--xnheap
Xenomai是一个实时操作系统(RTOS)层,用于Linux,旨在提供确定性的任务调度和服务。其内存管理机制包括一个名为xnheap的内存池,确保内存分配和释放的时间确定性,以满足硬实时系统的严格需求。
382 0
xenomai内核解析--实时内存管理--xnheap
|
测试技术 程序员
W模型和瀑布模型与“V”模式开发模型有何异同?
W模型和瀑布模型与“V”模式开发模型有何异同?
466 1
|
机器学习/深度学习 人工智能 自然语言处理
软考之专家系统的概念
软考之专家系统的概念
254 0
|
算法 Java C++
《经典图论算法》迪杰斯特拉算法(Dijkstra)
这个是求最短路径的迪杰斯特拉算法,另外我还写了50多种《经典图论算法》,每种都使用C++和Java两种语言实现,熟练掌握之后无论是参加蓝桥杯,信奥赛,还是其他比赛,或者是面试,都能轻松应对。