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

素数环(信息学奥赛一本通-2110)

【题目描述】

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

【输入】

输入正整数n。

【输出】

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

【输入样例】

6

【输出样例】

4 3 2 5 6 1

【提示】

数据满足:

4≤n≤30

【题解代码】

#include<bits/stdc++.h>
using namespace std;

int n;
bool vis[35];  //标记数组
int cnt[35];  //存储每一层的数据
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[100];  //标记数组   0-是素数   1-不是素数
void E_sieve(int x)
{
	isprime[0] = isprime[1] = 1;  //0和1都不是素数
	for (int i = 2; i * i <= x; i++)
	{
		if (isprime[i] == 0)  //i是素数
		{
			for (int j = i * i; j <= x; j += i)  //n之内的i的所有倍数都不是素数
			{
				isprime[j] = 1;
			}
		}
	}
}

void dfs(int depth)
{
	if (depth > n)
	{
		if (isprime[cnt[1] + cnt[depth - 1]]) return;  //如果首尾之和不是素数
		for (int i = 1; i < depth; i++)
		{
			printf("%d ", cnt[i]);
		}
		flag = true;
		return;
	}
	for (int i = 1; i <= n; i++)
	{
		if ((depth==1 && !vis[i]) || (depth > 1 && !vis[i])&& !isprime[i+cnt[depth-1]])  
		{
			cnt[depth] = i;
			vis[i] = 1;
			dfs(depth + 1);
			vis[i] = 0;
			if (flag) return;  //如果已经找到了,直接逐层返回即可,不需要继续寻找
		}
	}
}

int main()
{
	cin >> n;
	E_sieve(2 * n);
	dfs(1);
	return 0;
}

相关文章:

  • 对于简单的HTML、CSS、JavaScript前端,我们可以通过几种方式连接后端
  • C++ Primer 返回值和return语句
  • 数组_长度最小的子数组
  • 1-2 gitee创建远程仓库
  • 题解:洛谷 P4054 [JSOI2009] 计数问题
  • Beszel监控Docker安装
  • 变相提高大模型上下文长度-RAG文档压缩-3.优化map-reduce(reranker过滤+社区聚类)
  • 华为云kubernetes基于keda自动伸缩deployment副本(监听redis队列长度)
  • Redis进阶使用
  • 利用ollama 与deepseek r1大模型搭建本地知识库
  • 腿足机器人之六- 前向运动学
  • 2025-02-15 禅修-若分别性,离尘无体,斯则前尘分别影事
  • RAMinit 程序编译运行考古记录
  • 【云安全】云原生- K8S API Server 未授权访问
  • PowerBI 矩阵 列标题分组显示(两行列标题)
  • 安全测试中的身份认证与访问控制深度解析
  • Redis 03章——10大数据类型概述
  • doris:异步物化视图概述
  • 基于 Docker 搭建 Elasticsearch + Kibana 环境
  • 演示synchronized锁机制用法的简单Demo
  • 技术派|更强的带刀侍卫:从054B型战舰谈谈世界护卫舰发展
  • 刘国中:持续加强护士队伍建设,更好保障人民身体健康
  • 5年建成强化城市核心功能新引擎,上海北外滩“风景文化都是顶流”
  • 母亲节书单|关于生育自由的未来
  • 习近平将出席中国—拉美和加勒比国家共同体论坛第四届部长级会议开幕式并发表重要讲话
  • 西南大学教授、重庆健美运动奠基人之一李启圣逝世