现在的位置: 首页 > 综合 > 正文

素数环

2018年04月29日 ⁄ 综合 ⁄ 共 630字 ⁄ 字号 评论关闭

题目:从1-20个数字选择这些数字,并且把这些数字排成圈,使得相邻的两个数字的和为素数的排法有多少种?并一一枚举,跑了2分钟都没跑完,,,

# include<cstdio>
# include<iostream>
# include<cmath>
# include<cstdlib>
# include<cstring>

using namespace std;

int a[21];
int b[21];
int ans = 0;


int pd( int x,int y )
{
    int k = 2;
    int l = x+y;
    while ( k<=sqrt(l)&&l%k!=0 )
        k++;
    if ( k>sqrt(l) )
        return 1;
        else
            return 0;
}


int print()
{
    ans++;
    cout<<"<"<<ans<<">";
    for ( int j = 1;j <= 20;j++ )
        {
            cout<<a[j]<<" ";
        }
        cout<<endl;
}


int search ( int t )
{
    for ( int i = 1;i <= 20;i++ )
        {
            if (pd(a[t-1],i)&&(!b[i]))
                {
                    a[t] = i;
                    b[i] = 1;
                    if ( t==20 )
                        {
                            if ( pd(a[20],a[1]))
                                print();
                        }
                        else
                            search(t+1);
                            b[i] = 0;
                }
        }
}

int main(void)
{
    memset(a,0,sizeof(a));
    memset(b,0,sizeof(b));
    search(1);
    cout<<ans<<endl;
    system("pause");

    return 0;
}

抱歉!评论已关闭.