素数环「素数环问题回溯法问题分析」.docx
素数环素数环问题回溯法问题分析素数环是一个计算机程序问题,指的是将从1到n这n个整数围成 一个圆环,若其中任意2个相邻的数字相加,结果均为素数,那么这 个环就成为素数环其中程序方面包括递归实现C语言和递归实现C+, 以及递归实现Pascal。n=20时,下面的序列就是一个素数环1 2 3 4 7 6 5 8 9 10 13 16 15 14 17 20 11 12 19 18 英文名 Prime Ring Problemon = intinputquot请输入最大数nquotlists = 1#多个素数环 surplusnum = listrangel, n+1 #剩余的数 def sumisprimex, yx 与y之和是否是素数isprime=True#是否是素数s=x + y#和for io prime函数里,把条件判断xy改为x%y其它我没细看,有问题再告 诉我吧。If ai+ai+lltb then begin exchangeai+c, ai+dd=d+lelse break 这 不是排序,但需要一个一个交换比较加起来是否为素数,没有遗漏 我 只把主程序写了出来,其他小部分自己填充。0 = IbO = lif primeRingring, b, 1 printfquotnnThe prime ring is quotfori=0 iltLEN i+printfquot%d quot , ringiprintfquotnquotelseprintfquotnnNot found! nquoto 其时间复杂度应该是0! n因为需要找到满足素数环的所有条件的取 值,等价于找到2n的其中一个排列C+的回溯素数环 includeItiostreamusingnamespace stdint nint a20boolvist20bool isPrimeint xifo一个由自然数In n It 20素数环就是如下图所示,环上任意两个节 点上数值之和为素数1 4 2 3参考资料php? problemid=1114o 比如 1, 2, 3, 4, 7, 10, 9, 8, 5, 66, 1, 2, 3, 4, 7, 10, 9, 8, 5import import public class PrimeRing 求 1 n 素数环 public PrimeRirioif! visiispi+acurl如果i没有用过,并且与前一个数之和为素数 acur=ivisi=ldfsn, a, isp, vis, cur+lvisi=0 int mainint i, n, alOO, isplOO, visl00mo你能把这个程序的算法过程解释一遍吗你这个程序有不少问题啊比 如 ifvisiOispi+Acurl-1 第一次,你的 cur 为 0 这个时候 Acurl 就是Al 了,这个根本就越界了问题不少啊。Inputn (o < n < 20).OutputThe output format is shown as sample below. Each row represents a: ring beginning from 1 clockwdsely and anticlockwisely. The order of i requirements. Print solutions in lexicographical order.You are to write a program that completes above process.Print a blank line after each case.不清楚你是要求120所有长度的素数环还是要求长度为20的所有素 数环 按照后者给你改了一版程序出来 需要注意的有两点一个是由 于要递归尝试下一个数值,所以用来存结果的数组必须要作为参数传 进去另一个必须有一个数组。自己试试看,1到20排成一个素数环,能不能摆成我的代码结果也 是 0C+版 includeltiostream includeltcmath using namespace stdbool b21=0int total=0, a21=0int pdint, intint printo 文件输入输出应该不用多说吧freopenquotprimeinquot, quotrquot, stdinfreopenquotprimeoutquot, quotwquot, stdout 至于算法的话, 就是暴力搜索加剪枝如果当前值与上一个值之和是一个素数才继续向下搜索 用一个stackN记录数字 深。const max=100var aarraylmax of longintprocedure printvar ilongintbegin for i=l to 15 do writeai3writeInendfunction facp, qlongintbooleanvar n, ilongintbegin n=p+qo例1素数环 把从1到20这20个数摆成一个环,要求相邻的两个数 的和是一个素数 算法分析 非常明显,这是一道回溯的题目从1开 始,每个空位有2019种可能,只要填进去的数合法与前面的数不相 同与左边相邻的数的和是一。