1 条题解

  • 0
    @ 2023-7-5 13:46:17

    稍微改改即可。

    #include <bits/stdc++.h>
    using namespace std;
    int n,cnt;
    int a[21];
    bool vis[21];
    bool prime(int x){
        for (int i=2;i*i<=x;i++){
            if (x%i==0){
                return 0;
            }
        }
        return 1;
    }
    void dfs(int i,int p){
        for (int j=2;j<=n;j++){
            if (!vis[j]&&prime(j+p)){
                vis[j]=1;
                a[i]=j;
                if (i==n){
                    if (prime(j+1)){
                        cnt++;
                        for (int i=1;i<=n;i++){
                            cout<<a[i]<<' ';
                        }
                        cout<<endl;
                        vis[j]=0;
                        if (cnt==10){//只需输出前10个
                            exit(0);
                        }
                        return;
                    }
                }
                dfs(i+1,j);
                vis[j]=0;
            }
        }
    }
    int main(){
        cin>>n;
        if (n%2){//如果n为奇数则不可能有素数环(如果不加会在输入19时TLE)
            return 0;
        }
        a[1]=1;
        dfs(2,1);
        return 0;
    }
    
    • 1

    信息

    ID
    436
    时间
    1000ms
    内存
    128MiB
    难度
    3
    标签
    递交数
    53
    已通过
    28
    上传者