USACO 1.5.3 Superprime Rib

题意:

       求出给定长度为N的数,使得满足这个数从右边开始一位一位的切掉,剩下的数全部是质数

解法:

       一开始想按照顺序枚举,发现预处理质数的时间就已经很复杂了(最大长度为8,[0, 100000000]),

果断搜爆了

      看了一下解法提示,一位一位的进行搜索,剪枝条件(第一位数只能是2,3,5,7)其余位数只能是(1,3,5,7,9)

质数条件的限制,然后进行搜索即可,此时判断质数复杂度大为降低,比前一种思路减少了大量的运行时间,所以不能想得

太简单,USACO的题目都是很有质量的

 

    

/*
ID: lsswxr1
PROG: sprime
LANG: C++
*/
#include <iostream>
#include <vector>
#include <map>
#include <list>
#include <set>
#include <deque>
#include <stack>
#include <queue>
#include <algorithm>
#include <cmath>
#include <cctype>
#include <cstdio>
#include <iomanip>
#include <cmath>
#include <cstdio>
#include <string>
#include <cstring>
#include <fstream>
using namespace std;

#define USACO
#ifdef USACO
#define cin fin
#define cout fout
#endif
//
///宏定义
const int  INF = 1000000000;
const int MAXN = 10251;
const int maxn = MAXN;
///全局变量 和 函数

#ifdef USACO    
    ofstream fout ("sprime.out");
    ifstream fin ("sprime.in");
#endif   

int N;
int farray[4] = {2, 3, 5, 7};
int arrays[5] = {1, 3, 5, 7, 9};
inline bool isPrime(int cur)
{
    for (int i = 2; i <= sqrt(double(cur)); i++)
    {
        if (cur % i == 0)
            return false;
    }
    return true;
}

void dfs(int num, int level)
{
    if (!isPrime(num))
    {
        return;
    }
    if (level == N)
    {
        cout << num << endl;
    }

    if (level == 0)
    {
        for (int i = 0; i < 4; i++)
        {
            dfs(farray[i], 1);
        }
    }
    else
    {
        for (int i = 0; i < 5; i++)
        {
            dfs(num * 10 + arrays[i], level + 1);
        }
    }
}


int main()
{


    
    while (cin >> N)
    {
        dfs(0, 0);
    }

    ///结束
    return 0;
}

 

 

转载于:https://www.cnblogs.com/rayforsure/p/3493170.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值