#include<iostream>
using namespace std;
int a[21],b[21];//定义两个数组,b放数,a来判断用没用;
int test(int x);
void outs();
int prime(int x);//判素数;
int main()//主程序,不解释;
{
int m,i;
m=1;
for(i=1;i<=20;i++)
{
a[i]=1;
}
test(m);
return 0;
}
int test(int x)//一个递归思想,不断判断下一个数;
{
int i;
if(x>20&&prime(b[20]+b[1])==1)//当填完时,输出,注意,是个环,最后一个与第一个也要连起来;
{
outs();
}
else
{
for(i=1;i<=20;i++)
{
if((a[i]==1)&&prime(i+b[x-1])==1)
{
b[x]=i;
a[i]=0;
test(x+1);
if(b[20]!=0&&prime(b[20]+b[1])==1)
{
return 0;
}
else
{
a[i]=1;
b[x]=0;
}
}
}
}
}
int prime(int x)
{
int i;
if(x==1)
{
return 1;
}
else
{
for(i=2;i*i<=x;i++)
{
if(x%i==0)
{
return 0;
}
}
return 1;
}
}
void outs()//输出函数;
{
int i;
for(i=1;i<=20;i++)
{
if(i==1)
{
else
{
cout<<' '<<b[i];//其他的都要加空格;
}
}
cout<<endl;
using namespace std;
int a[21],b[21];//定义两个数组,b放数,a来判断用没用;
int test(int x);
void outs();
int prime(int x);//判素数;
int main()//主程序,不解释;
{
int m,i;
m=1;
for(i=1;i<=20;i++)
{
a[i]=1;
}
test(m);
return 0;
}
int test(int x)//一个递归思想,不断判断下一个数;
{
int i;
if(x>20&&prime(b[20]+b[1])==1)//当填完时,输出,注意,是个环,最后一个与第一个也要连起来;
{
outs();
}
else
{
for(i=1;i<=20;i++)
{
if((a[i]==1)&&prime(i+b[x-1])==1)
{
b[x]=i;
a[i]=0;
test(x+1);
if(b[20]!=0&&prime(b[20]+b[1])==1)
{
return 0;
}
else
{
a[i]=1;
b[x]=0;
}
}
}
}
}
int prime(int x)
{
int i;
if(x==1)
{
return 1;
}
else
{
for(i=2;i*i<=x;i++)
{
if(x%i==0)
{
return 0;
}
}
return 1;
}
}
void outs()//输出函数;
{
int i;
for(i=1;i<=20;i++)
{
if(i==1)
{
cout<<b[1];//第一个单独输出;
}else
{
cout<<' '<<b[i];//其他的都要加空格;
}
}
cout<<endl;
}
很多小伙伴这道题都卡在了环上,其实这道题没有提示清楚,虽然在题目上,希望你们看完后尽快解决这道题。