zoukankan      html  css  js  c++  java
  • Anti-prime Sequences

    Anti-prime Sequences
    Time Limit: 3000MS   Memory Limit: 30000K
    Total Submissions: 3355   Accepted: 1531

    Description

    Given a sequence of consecutive integers n,n+1,n+2,...,m, an anti-prime sequence is a rearrangement of these integers so that each adjacent pair of integers sums to a composite (non-prime) number. For example, if n = 1 and m = 10, one such anti-prime sequence is 1,3,5,4,2,6,9,7,8,10. This is also the lexicographically first such sequence.

    We can extend the definition by defining a degree danti-prime sequence as one where all consecutive subsequences of length 2,3,...,d sum to a composite number. The sequence above is a degree 2 anti-prime sequence, but not a degree 3, since the subsequence 5, 4, 2 sums to 11. The lexicographically .rst degree 3 anti-prime sequence for these numbers is 1,3,5,4,6,2,10,8,7,9.

    Input

    Input will consist of multiple input sets. Each set will consist of three integers, n, m, and d on a single line. The values of n, m and d will satisfy 1 <= n < m <= 1000, and 2 <= d <= 10. The line 0 0 0 will indicate end of input and should not be processed.

    Output

    For each input set, output a single line consisting of a comma-separated list of integers forming a degree danti-prime sequence (do not insert any spaces and do not split the output over multiple lines). In the case where more than one anti-prime sequence exists, print the lexicographically first one (i.e., output the one with the lowest first value; in case of a tie, the lowest second value, etc.). In the case where no anti-prime sequence exists, output

    No anti-prime sequence exists.

    Sample Input

    1 10 2
    1 10 3
    1 10 5
    40 60 7
    0 0 0
    

    Sample Output

    1,3,5,4,2,6,9,7,8,10
    1,3,5,4,6,2,10,8,7,9
    No anti-prime sequence exists.
    40,41,43,42,44,46,45,47,48,50,55,53,52,60,56,49,51,59,58,57,54
    题意:在【2,d】长度的连续序列的和都要为合数。
    思路:DFS。
     1 #include<stdio.h>
     2 #include<algorithm>
     3 #include<iostream>
     4 #include<stdlib.h>
     5 #include<string.h>
     6 #include<queue>
     7 #include<stack>
     8 #include<math.h>
     9 using namespace std;
    10 typedef long long LL;
    11 bool prime[20000]= {0};
    12 int tt[10000];
    13 bool cm[1005];
    14 int ts=0;
    15 bool check(int n,int m);
    16 int dfs(int n,int m,int d,int kk,int pp);
    17 int main(void)
    18 {
    19     int i,j,k;
    20     for(i=2; i<=1000; i++)
    21     {
    22         if(!prime[i])
    23         {
    24             for(j=i; (i*j)<=20000; j++)
    25             {
    26                 prime[i*j]=true;
    27             }
    28         }
    29     }
    30     int n,m;
    31     while(scanf("%d %d %d",&n,&m,&k),n!=0&&m!=0&&k!=0)
    32     {
    33         memset(cm,0,sizeof(cm));
    34         ts=0;
    35         int uu=dfs(0,m-n+1,k,n,m);
    36         if(uu)
    37         {
    38             printf("%d",tt[0]);
    39             for(i=1; i<(m-n+1); i++)
    40             {
    41                 printf(",%d",tt[i]);
    42             }
    43             printf("
    ");
    44         }
    45         else printf("No anti-prime sequence exists.
    ");
    46     }
    47 }
    48 bool check(int n,int m)
    49 {
    50     int i,j;
    51 
    52 
    53         LL sum=tt[m];
    54         for(i=m-1; i>=max(n,0); i--)
    55         {
    56             sum+=tt[i];
    57             if(!prime[sum])
    58                 return false;
    59         }
    60         return true;
    61 }
    62 int dfs(int n,int m,int d,int kk,int pp)
    63 {
    64     int i;
    65     if(ts)return 1;
    66     if(n==m)
    67     {
    68 
    69             bool cc=check(n-d,m-1);
    70             if(!cc)
    71             {
    72                 return 0;
    73             }
    74         ts=1;
    75         return 1;
    76     }
    77     else
    78     {
    79         bool cc=check(n-d,n-1);
    80         if(cc)
    81         {
    82             for(i=kk; i<=pp; i++)
    83             {
    84                 if(ts)return 1;
    85                 if(!cm[i])
    86                 {
    87                     tt[n]=i;
    88                     cm[i]=true;
    89                     int uu=dfs(n+1,m,d,kk,pp);
    90                     cm[i]=false;
    91                     if(uu)return 1;
    92                 }
    93             }
    94         }
    95         else return 0;
    96     }
    97     return 0;
    98 }
    油!油!you@
  • 相关阅读:
    未能加载文件或程序集“*.DALSQLServer”的原因和解决办法
    删除数据库重复数据一方法
    未能加载文件或程序集 System.Web.Extensions 的解决办法
    3D电影的原理
    语法分析器自动生成工具一览
    【翻译】语法分析工具Gold介绍(1)——系统简介
    安装版本管理软件SVN
    在Visual Studio 2008(及以后版本)中使用SVN
    20191218《信息安全导论》第四周总结
    20191218 唐启恒 师生关系
  • 原文地址:https://www.cnblogs.com/zzuli2sjy/p/5534385.html
Copyright © 2011-2022 走看看