素数环_数据结构素数环_1到20的素数环
没看出什么大问题。
1.你的check3(inti)的时候:
if(i <20)
return(check2(a[i]+a[i-1]));
i=1的情况你没考虑,i=1应该直接返回1。
2.没必要检测当前摆放的数字与前面的数字有无重复,不可能重复的。
3.判断素数如果换成8楼的列表就快多了。
4.如果8楼的程序的解是6309300个的话,你解的个数应该是6309300*20,譬如1,2,3,4四个数,你还会把2,3,4,1
3,4,1,2
4,1,2,3
打印出来。不过8楼的程序为什么没有循环打印我也没看出来。素数环素数环
//primeCircle_cTree.cpp:定义控制台应用程序的入口点。
//
#include"stdafx.h"
#include<stdio.h>
#include<math.h>
inta[21];
intcheck1(inti)//检测当前摆放的数字与前面的数字有无重复
{
intk;
for(k=1;k<=i-1;k++)
if(a[k]==a[i])
return0;
return1;
}
intcheck2(intx)//检测x是否为素数
{
intk,n;
n=sqrt(double(x));
for(k=2;k<=n;k++)
if(x%k==0)
return0;
return1;
}
intcheck3(inti)//检测与前面相邻的数据的和是否是素数
{
if(i<20)
return(check2(a[i]+a[i-1]));
else
return(check2(a[i]+a[i-1])&&check2(a[i]+a[1]));//特别要注意第20个数还要和第一个数判断是否是素数
}
voidoutput()
{
intj;
for(j=1;j<=20;j++)
printf("%d,",a[j]);
return;
}
voidswap(intt1,intt2)//数据交换排列树的精华吧
{
intt;
t=a[t1];
a[t1]=a[t2];
a[t2]=t;
return;
}
voidtry(intt)
{
intj;
if(t>20)
output();
else
{
for(j=t;j<=20;j++)
{
swap(t,j);
if(check1(t)==1&&check3(t)==1)
{
try(t+1);
}
swap(t,j);
}
}
return;
}
voidmain()
{
intk;
for(k=1;k<=20;k++)//定义素数环初始排列顺序,1,2,3...20
a[k]=k;
try(1);
return;
}
我是农民我不懂理财