题目描述:
一个由自然数 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,