USACO 1.6.3 Superprime Rib 特殊的质数肋骨

题解

这题就比较简单了,就是个深度搜索。注意到每次构成都是素数,显然可以剪枝。
数据很小,非常简单。


代码

/*
PROG:sprime
ID:imking022
LANG:C++
 */
#include <iostream>
#include <cstdio>
#include <fstream>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <algorithm>
using namespace std;

int n,sum=0;

int reff[]={0,1,2,3,5,7,9};
bool isprm(int num){
    if(num==1) return false;
    for(int i=2;i*i<=num;i++){
        if(num%i == 0) return false;
    }
    return true;
}

void deal(int n){
    if(n==0){
        cout<<sum<<endl;
        return;
    }

    sum*=10;
    for(int i=1;i<=6;i++){
        sum+=reff[i];
        if(isprm(sum)){
            deal(n-1);
        }
        sum-=reff[i];
    }
    sum/=10;
}

int main(void){
    int num;
    cin>>num;
    deal(num);
    return 0;
}

猜你喜欢

转载自blog.csdn.net/smmyy022/article/details/80324440