素数环问题

涉及函数嵌套,深搜,我用两种证明素数的方法写的

#include<math.h>
#include<string.h>
#include<algorithm>
#include<stdio.h>
int a[100],b[100],book[100];
int n;
int pri(int x)
{
    int i;
    for( i=2;i,x;i++)
        if(x%i==0)
            break;
        if(i==x)
        return 1;
        return 0;
}
void dfs(int d)
{
    if(d==n&&pri(a[n-1]+1))//如果排到最后一位,其与第一位和为素数
    {
        printf("1");
        for(int i=1;i<n;i++)
            printf(" %d",a[i]);
        printf("\n");
    }
   if (d==n)
    return ;
        for(int i=2;i<=n;i++)
        {
            if(!book[i]&&pri(a[d-1]+i))//选择没别标记切该数与前一位数满足条件
            {

                 a[d]=i;
                 book[i]=1;
                 dfs(d+1);
                 book[i]=0;
            }
        }
}
int main()
{
    int s=1;
   while(~scanf("%d",&n))
   {
       memset(book,0,sizeof(book));
       a[0]=1;
       book[1]=1;  //标记1被使用
       printf("Case %d:\n",s++);
        dfs(1);
      printf("\n");

   }
    return 0;
}

```cpp
#include<math.h>
#include<string.h>
#include<algorithm>
#include<stdio.h>
int a[100],b[100],book[100];
int n;
int pri(int x)
{
    for(int i=2;i*i<=x;i++)
        if(x%i==0)
        return 0;
        return 1;
}
void dfs(int d)
{
    if(d==n&&pri(a[n-1]+1))
    {
        printf("1");
        for(int i=1;i<n;i++)
            printf(" %d",a[i]);
        printf("\n");
    }
   if (d==n)
    return ;
        for(int i=2;i<=n;i++)
        {
            if(!book[i]&&pri(a[d-1]+i))
            {

                 a[d]=i;
                 book[i]=1;
                 dfs(d+1);
                 book[i]=0;
            }
        }
}
int main()
{
    int s=1;
   while(~scanf("%d",&n))
   {
       memset(book,0,sizeof(book));
       a[0]=1;
       book[1]=1;
       printf("Case %d:\n",s++);
        dfs(1);
      printf("\n");

   }
    return 0;
}
愿你有种豁然开朗的感觉。[

 1. 添加链接描述

](https://vjudge.net/contest/357631#problem/F)


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值