这道题大概是求1-n的指数环
这道题如果去判断质数太麻烦了
因为最大只用得到小于33的质数
可以直接写一个质数表
(不小心 把33 当成质数wrong了一次)
然后就是搜索
每次搜索的时候用标记 (标记已经用过的数,这种方法可以搜出全排列)
因为基数和基数相加不可能,偶数相加也不可能是质数
所以可以做一下剪枝
#include<stdio.h>
int hehe[50]={0};
int ans[18]={0,1};
int haxi[18]={0},n;
void dfs(int t)
{
if(t==n+1)
{
if(hehe[1+ans[t-1] ])
{
for(int i=1;i<=n;i++)
printf("%d ",ans[i]);
printf("\n");
}
}
else
{
int i=((ans[t-1]%2==0)?3:2);
for(;i<=n;i+=2)
{
if(haxi[i]==0)
{
if(hehe[i+ans[t-1] ])
{
haxi[i]=1;
ans[t]=i;
dfs(t+1);
haxi[i]=0;
}
}
}
}
}
int main()
{
hehe[3]=1;
hehe[5]=1;
hehe[7]=1;
hehe[11]=1;
hehe[13]=1;
hehe[17]=1;
hehe[19]=1;
hehe[23]=1;
hehe[29]=1;
hehe[31]=1;
scanf("%d",&n);
dfs(2);
}