Superprime Rib chapter 1.5

  第一次直接过,题目虽然简单,但是还是很高兴。最高位只能是{2,3,5,7},其他位只能是{1,3,7,9}

/*

ID: hubiao cave

PROG: sprime

LANG: C++

*/




#include<iostream>

#include<fstream>

#include<string>
#include<list>

using namespace std;


const int ar[4]={2,3,5,7};
bool IsPrime(int );
int count;
void dfs(int n,int m);
list<int>li;
int main()

{

    ifstream fin("sprime.in");
    ofstream fout("sprime.out");


    fin>>count;


    dfs(1,0);
    for(list<int>::iterator it=li.begin();it!=li.end();it++ )
        fout<<*it<<endl;

    return 0;


}

void dfs(int n,int m)
{
    if(count==1)
    {
        for(int i=0;i<4;i++)
            li.push_back(ar[i]);
        return;
    }
;    if(n==1)
        for(int i=0;i<4;i++)
           dfs(2,ar[i]);

    if(1<n&&n<count)
    {
        for(int i=1;i<=9;i++)
        {
            if(i==5||i%2==0)
                continue;
            if(IsPrime(m*10+i))
                dfs(n+1,m*10+i);
            
        }
    }

    if(n==count)
    {
    for(int i=1;i<=9;i++)
        {
            if(i==5||i%2==0)
                continue;
            if(IsPrime(m*10+i))
                li.push_back(m*10+i);
            
        }
    }
}

bool IsPrime(int n)
{
    int i=2;
    for(;i*i<=n;i++)
    {
        if(n%i==0)
            return false;
    }
    return true;

}
原文地址:https://www.cnblogs.com/cavehubiao/p/3261815.html