#include<iostream>
#include<cmath>
#include<cstring>
using namespace std;
bool prime(int n){
    if(n==1) return 0;
    else for(int i=2;i<=sqrt(n);i++) {if(!(n%i)) return 0;}
    return 1;
}
int n;
int vis[20],a[20]={0};
void print(){
    for(int i=1;i<=n;i++)
        {
            printf("%d",a[i]);
            if(i!=n)printf(" ");
        }
    printf("\n");
}
void dfs(int j){
    if(j>n){
        print();
        return;
    }
    for(int i=2;i<=n;i++){
         if(j==n){if(!prime(1+i))continue;}
            else ;
        if(vis[i]==0&&prime(a[j-1]+i)){
            a[j]=i;
            vis[i]=1;
            dfs(j+1);
            vis[i]=0;
        }
    }
}
int main(){
    cin>>n;
    memset(vis,0,sizeof(vis));
    memset(a,0,sizeof(a));
    a[1]=1;
    vis[1]=1;
    dfs(2);
}

问题描述:

输入n  输出一个由1到n相邻是素数的环