素数环问题

来源:互联网 发布:linux 禁止修改密码 编辑:程序博客网 时间:2024/06/05 05:14
#include<iostream>
using namespace std;
int a[21],b[21];//定义两个数组,b放数,a来判断用没用;
int test(int x);
void outs();
int prime(int x);//判素数;
int main()//主程序,不解释;
{
    int m,i;
    m=1;
    for(i=1;i<=20;i++)
    {
        a[i]=1;
    }
    test(m);
    return 0;
}
int test(int x)//一个递归思想,不断判断下一个数;
{
    int i;
    if(x>20&&prime(b[20]+b[1])==1)//当填完时,输出,注意,是个环,最后一个与第一个也要连起来;
    {
        outs();
    }
    else
    {
        for(i=1;i<=20;i++)
        {
            if((a[i]==1)&&prime(i+b[x-1])==1)
            {
                b[x]=i;
                a[i]=0;
                test(x+1);
                if(b[20]!=0&&prime(b[20]+b[1])==1)
                {
                    return 0;
                }
                else
                {
                    a[i]=1;
                    b[x]=0;
                }
            }
        }
    }
}
int prime(int x)
{
    int i;
    if(x==1)
    {
        return 1;
    }
    else
    {
        for(i=2;i*i<=x;i++)
        {
            if(x%i==0)
            {
                return 0;
            }
        }
        return 1;
    }    
}
void outs()//输出函数;
{
    int i;
    for(i=1;i<=20;i++)
    {
        if(i==1)
        {

            cout<<b[1];//第一个单独输出;

        }
        else
        {
            cout<<' '<<b[i];//其他的都要加空格;
        }
    }
    cout<<endl;

}

很多小伙伴这道题都卡在了环上,其实这道题没有提示清楚,虽然在题目上,希望你们看完后尽快解决这道题。

原创粉丝点击