EOJ #1114. 素数环

该博客探讨了EOJ #1114题目的解决方法,即如何构造1到n的素数环。通过DFS(深度优先搜索)策略,利用递归解决此问题。文章提到了先构建36以内的素数数组,简化素数判断,并提供了实现代码。博主分享了在本地测试18时的结果,与EOJ平台的运行结果进行对比,暗示可能EOJ仅测试了部分情况。
摘要由CSDN通过智能技术生成

题目描述:

一个由自然数 1…n (n≤18) 素数环就是如下图所示,环上任意两个节点上数值之和为素数。

 1
/ \
4  2
\ /
 3

输入格式:

输入只有一个数 n,表示你需要建立一个 1…n 的素数环。

输出格式:

按照字典序输出每一种情况。我们约定顺时针为正向,且第一个元素必须是 1,参见 Sample。

样例:

Input
6
Output
1 4 3 2 5 6
1 6 5 2 3 4

思路分析:

本题分类为DFS,因此首先考虑用递归方法求解,当然优解也是如此。题目给出的描述很简单,输入一个数,输出所有的素数环,素数环即为第i为与第i-1与i+1为的和都为素数。

首先建立一个36以内的素数数组,以0表示非素数,1表示素食。便于之后判断是否为素数,本题虽然要求输出18以内的素数环,但之后的递归计算是一个很耗时的操作,因此在素数的判断上,尽量使用最少的时间。

int prime[40] = {
    0, 0, 1, 1, 0, 1, 0, 1, 0, 0,
    0, 1, 0, 1, 0, 0, 0, 1, 0, 1,
    0, 0, 0, 1, 0, 0, 0, 0, 0, 1,
    0, 1, 0, 0, 0, 0, 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值