• 1031 质数环


    1031 质数环

     时间限制: 1 s
     空间限制: 128000 KB
     题目等级 : 黄金 Gold
     
     
    题目描述 Description

    一个大小为N(N<=17)的质数环是由1到N共N个自然数组成的一个数环,数环上每两个相邻的数字之和为质数。如下图是一个大小为6的质数环。为了方便描述,规定数环上的第一个数字总是1。如下图可用1 4 3 2 5 6来描述。若两个质数环,数字排列顺序相同则视为本质相同。现在要求你求出所有本质不同的数环。

    输入描述 Input Description


    只有一个数N,表示需求的质数环的大小。如:

    输出描述 Output Description

    每一行描述一个数环,如果有多组解,按照字典序从小到大输出。如:

    样例输入 Sample Input

    6

    样例输出 Sample Output

    1 4 3 2 5 6

    1 6 5 2 3 4

    数据范围及提示 Data Size & Hint
    n<=17
     1 #include<cmath>
     2 #include<cstring>
     3 #include<cstdio>
     4 int n; 
     5 bool vis[20];
     6 int ans[20];
     7 int num[101];
     8 void out()
     9 {
    10     for(int i=1;i<=n;++i)
    11     printf("%d ",ans[i]);
    12     printf("
    ");
    13 }
    14 void dfs(int s)
    15 {
    16     for(int i=2;i<=n;++i)
    17     {
    18         if(vis[i]==0&&!num[ans[s-1]+i])
    19         {    
    20             vis[i]=1;
    21             ans[s]=i;
    22             if(s==n&&!num[ans[n]+ans[1]])out();
    23             dfs(s+1);
    24             vis[i]=0;
    25         }
    26     }
    27 }
    28 void chu()  //筛法 
    29 {
    30     num[1]=num[0]=1;
    31     for(int i=2;i<=10;++i)
    32     {
    33         if(num[i]==0)for(int j=i*i;j<=100;j+=i)
    34         num[j]=1;
    35     }
    36 }
    37 int main()
    38 {
    39     chu();  //初始化 
    40     scanf("%d",&n);
    41     if(n%2==1)
    42     {
    43         printf("
    ");
    44         return 0;
    45     }
    46     memset(vis,0,sizeof(vis));
    47     vis[1]=1;
    48     ans[1]=1;
    49     dfs(2);
    50     return 0;
    51 }
  • 相关阅读:
    AM335X UBOOT(以UART为例分析UBOOT主要流程)
    分析一个UBOOT的方法
    Omapl138中AIS文件分析(参照Using the OMAP-L138 Bootloader)(转)
    linux内核--wait_event_interruptible_timeout()函数分析(转)
    CSS3(8)过渡
    CSS3(7)2D转换
    CSS3(6)字体
    CSS3(5)文本效果
    CSS3(4)渐变
    CSS3(3)背景
  • 原文地址:https://www.cnblogs.com/mjtcn/p/6748242.html
Copyright © 2020-2023  润新知