码迷,mamicode.com
首页 > 其他好文 > 详细

HDU_1016

时间:2015-05-11 21:51:44      阅读:121      评论:0      收藏:0      [点我收藏+]

标签:hdu_1016

#include<cstdio>
#include<cmath>
#include<iostream>
#include<cstring>
using namespace std;

const int Max = 40;

bool prime[Max];
bool vis[Max];
int A[Max];
int n;

void IsPrime() {
    prime[0] = prime[1] = 0; prime[2] = 1;
    for(int i = 3; i < Max; i++)
        prime[i] = (i%2 == 0) ? 0 : 1;
    int t = (int)sqrt(Max*10);
    for(int i = 3; i <= t; i++)
        if(prime[i])
            for(int j = i*i; j < Max; j += 2*i)
                prime[j] = 0;
}

void dfs(int cur) {
    if(cur == n && prime[A[0]+A[n-1]]) {
        for(int i = 0; i < n; i++)   //打印的时候是从A[0]开始打印的
            {printf("%d", A[i]);if(i != n-1) printf(" ");}
            printf("\n");
    }
    else for(int i = 2; i <= n; i++)
    if(!vis[i] && prime[i+A[cur-1]]) {
  //  如果这个数还没有使用过并且和前一个数之和为素数的话
        A[cur] = i;
        vis[i] = 1;
        dfs(cur+1);
        vis[i] = 0;   //清除标志
    }
}

int main(){
    int cnt = 0;
    IsPrime();
    while(scanf("%d", &n) != EOF) {
            memset(vis, 0, sizeof(vis));
        printf("Case %d:\n", ++cnt);
        A[0] = 1;
        dfs(1);
        printf("\n");
    }
    return 0;
}

HDU_1016

标签:hdu_1016

原文地址:http://blog.csdn.net/czkct/article/details/45649443

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!