素数环

来源:互联网 发布:拉塞尔夏季联赛数据 编辑:程序博客网 时间:2024/05/16 16:15

问题描述:输入正整数n,把整数1,2,3,...,n组成的一个环,使得相邻两个整数之和均为素数。输出时从整数1开始逆时针排列。同一个环应恰好输出一次。n<=16.

样例输入:

6

样例输出:

1 4 3 2 5 6

1 6 5 2 3 4


#include<cstdio>#include<cstring>#include<cstdlib>#include<cmath>int vis[100], A[100], isp[100];int n;int is_prime(int x){    for(int i = 2; i <= sqrt(x); i++)    {        if(x % i  == 0)            return 0;    }    return 1;}void dfs(int cur){    if(cur == n && isp[A[0]+A[n-1]])    {        for(int i = 0; i < n; i++) printf("%d ",A[i]);        printf("\n");    }    for(int i = 2; i <= n; i++)    if(!vis[i] && isp[i+A[cur-1]])    {        A[cur] = i;        vis[i] = 1;        dfs(cur+1);        vis[i] = 0;    }}int main(){    memset(vis,0,sizeof(vis));    memset(isp,0,sizeof(isp));    scanf("%d",&n);    for(int i = 2; i <= n*2; i++) isp[i] = is_prime(i);    for(int i = 0; i < n; i++) A[i] = i+1;    dfs(1);    return 0;}


0 0
原创粉丝点击