回溯算法之----素数环(相邻两个数之和为素数)

版权声明:转载请附上原文链接哟! https://blog.csdn.net/weixin_44170305/article/details/89849974

如花美眷,似水流年,回得了过去,回不了当初。

告诉你们不要填太大的数哟(1~10就行)

10的素数环个数为4872个呢!一般到14程序就运行的很慢了。

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<string>
#include<map>
#include<algorithm>
#include<iomanip>
#include<queue>
#include<set>
#include<stack>
using namespace std;
bool b[101]={0};
int n,sum=0,a[101]={0};
bool pd(int x,int y)
{
    int e=x+y;
    for(int k=2;k<sqrt(e);k++)
        if(e%k==0)
            return 0;
        return 1;
}
int print()
{
    sum++;
    printf("<%d> ",sum);
    for(int j=1;j<=n;j++)
        printf("%d ",a[j]);
    printf("\n");
}
int search(int t)
{
    for(int i=1;i<=n;i++)
    {
        if(pd(a[t-1],i)&&(!b[i]))
        {
            a[t]=i;
            b[i]=1;
            if(t==n)
            {
                if(pd(a[n],a[1]))
                    print();
            }
            else search(t+1);
            b[i]=0;
        }
    }
}
int main()
{
    freopen("ssh.out","w",stdout);
    scanf("%d",&n);
    search(1);
    printf("共能组成%d个素数环\n",sum);
    fclose(stdout);
}

猜你喜欢

转载自blog.csdn.net/weixin_44170305/article/details/89849974
今日推荐