当前位置: 首页 > news >正文

蓝桥杯备赛 Day14 素数环

信息学奥赛一本通(C++版)在线评测系统

【题目描述】

输入正整数nn,把整数11,22,…,nn 组成一个环,使得相邻两个整数之和均为素数。

【输入】

输入正整数nn。

【输出】

输出任意一个满足条件的环。

【输入样例】

6

【输出样例】

4 3 2 5 6 1

【提示】

数据满足:

4≤n≤30

#include<iostream>
#include<cmath>
using namespace std;int n;
bool vis[110];
int cnt[110];
bool flag = false;//先假装搜不到bool isPrime(int x) {if (x < 2) return false;for (int i = 2; i <= sqrt(x); i++) {if (x % i == 0) return false;} return true;
}void dfs(int depth) {//7.终止条件if (depth > n) {//前n层已经搜完了if (!isPrime(cnt[depth - 1] + cnt[1])) return;for (int i = 1; i < depth; i++) {cout << cnt[i] << " ";}cout << endl;flag = true;return;}//1.枚举方案for (int i = 1; i <= n; i++) {//	2.判断标记if ((depth == 1 && !vis[i]) || (depth > 1 && !vis[i] && isPrime(i + cnt[depth - 1]))) {//	3.搜索cnt[depth] = i;//	4.标记 - 防止重复搜索vis[i] = 1;//	5.进入下一层搜索dfs(depth + 1);//	6.回溯vis[i] = 0;if (flag == true) return;}}
}int main() {cin >> n;dfs(1);return 0;
}

优化

#include<iostream>
#include<cmath>
using namespace std;int n;
bool vis[110];
int cnt[110];
bool flag = false;//先假装搜不到//bool isPrime(int x) {
//	if (x < 2) return false;
//	for (int i = 2; i <= sqrt(x); i++) {
//		if (x % i == 0) return false;
//	} return true;
//}bool isPrime[110];//标记素数   isPrime[x]=0/1   0-x是素数  1-x不是素数
//埃氏筛原理:将素数的倍数全部筛掉,留下的就是素数
void E_sieve(int n) {isPrime[0] = isPrime[1] = 1;//0和1不是素数for (int i = 2; i * i <= n; i++) {if (isPrime[i] == 0) {//代表i是素数for (int j = i * i; j <= n; j += i) {//j代表i的所有倍数(n以内)isPrime[j] = 1;//j一定不是素数}}}
}void dfs(int depth) {//7.终止条件if (depth > n) {//前n层已经搜完了if (isPrime[cnt[depth - 1] + cnt[1]]) return;for (int i = 1; i < depth; i++) {printf("%d ", cnt[i]);}cout << endl;flag = true;return;}//1.枚举方案for (int i = 1; i <= n; i++) {//	2.判断标记if ((depth == 1 && !vis[i]) || (depth > 1 && !vis[i] && !isPrime[i + cnt[depth - 1]])) {//	3.搜索cnt[depth] = i;//	4.标记 - 防止重复搜索vis[i] = 1;//	5.进入下一层搜索dfs(depth + 1);//	6.回溯vis[i] = 0;if (flag == true) return;}}
}int main() {cin >> n;E_sieve(2*n);//最大要筛n+n-1,dfs(1);return 0;
}

http://www.lryc.cn/news/536434.html

相关文章:

  • 小程序canvas2d实现横版全屏和竖版逐字的签名组件(字帖式米字格签名组件)
  • haproxy详解笔记
  • SpringCloud框架下的注册中心比较:Eureka与Consul的实战解析
  • 前端调用串口通信
  • 23、深度学习-自学之路-激活函数relu、tanh、sigmoid、softmax函数的正向传播和反向梯度。
  • 《8天入门Trustzone/TEE/安全架构》
  • 计算机视觉中图像的基础认知
  • MYSQL的管理备份
  • 数据仓库与数据挖掘记录 三
  • 第12周:LSTM(火灾温度)
  • MySQL的SQL执行流程
  • Foundation CSS 可见性
  • 7. Docker 容器数据卷的使用(超详细的讲解说明)
  • 算法——结合实例了解广度优先搜索(BFS)搜索
  • qt QCommandLineOption 详解
  • Linux权限提升-内核溢出
  • 【环境安装】重装Docker-26.0.2版本
  • 【云安全】云原生- K8S API Server 未授权访问
  • 笔记7——条件判断
  • Word 公式转 CSDN 插件 发布
  • 二次封装axios解决异步通信痛点
  • 算法——结合实例了解深度优先搜索(DFS)
  • 数据结构(考研)
  • 使用SSE协议进行服务端向客户端主动发送消息
  • FastAPI 高并发与性能优化
  • DFS+回溯+剪枝(深度优先搜索)——搜索算法
  • 在cursor/vscode中使用godot C#进行游戏开发
  • vant4 van-list组件的使用
  • 介绍 Liquibase、Flyway、Talend 和 Apache NiFi:选择适合的工具
  • 攻防世界33 catcat-new【文件包含/flask_session伪造】