USACO--1.5Superprime Rib

直接dfs穷举所有的数,然后再判断是不是素数,注意dfs时不同层的剪枝。

代码如下:

/*
ID: 15674811
LANG: C++
TASK: sprime
*/

#include<iostream>
#include<cstdio>
#include<cstring>
#include<fstream>
#include<algorithm>
#include<cmath>
using namespace std;

int n;

bool is_prime(int n)
{
    int k=sqrt(n)+0.5;
    for(int i=2;i<=k;i++)
        if(n%i==0)
           return 0;
    return 1;
}

bool prime[1000002];

bool check(int n)
{
    if(n<=1000000)
    {
        if(prime[n])
            return 0;
        return 1;
    }
    return is_prime(n);
}

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

void dfs(int sum,int cur)
{
    if(cur==n)
    {
        if(check(sum))
            fout<<sum<<endl;
        return ;
    }
    if(cur==n-1)
    {
        for(int i=1;i<=9;i++)
        {
            int tmp=sum*10+i;
            if(check(tmp)==0)
                continue;
            dfs(tmp,cur+1);
        }
    }
    else
    {
        for(int i=1;i<=9;i+=2)
        {
            int tmp=sum*10+i;
            if(check(tmp)==0)
                continue;
            dfs(tmp,cur+1);
        }
    }
}
int main()
{
    ///ifstream fin("lkl.txt");
    memset(prime,0,sizeof(prime));
    prime[1]=1;
    for(int i=2;i<=1000;i++)
        for(int j=i*2;j<=1000000;j+=i)
             prime[j]=1;
    while(fin>>n)
    {
        for(int i=2;i<=9;i++)
        {
            if(prime[i])
                continue;
            dfs(i,1);
        }
    }
  return 0;
}
时间: 2024-11-07 10:28:37

USACO--1.5Superprime Rib的相关文章

USACO 1.5 Superprime Rib

Superprime Rib Butchering Farmer John's cows always yields the best prime rib. You can tell prime ribs by looking at the digits lovingly stamped across them, one by one, by FJ and the USDA. Farmer John ensures that a purchaser of his prime ribs gets

USACO 1.5.3 SuperPrime Rib

The set of ribs denoted by 7331 is prime; the three ribs 733 are prime; the two ribs 73 are prime, and, of course, the last rib, 7, is prime. The number 7331 is called a superprime of length 4. Write a program that accepts a number N 1 <=N<=8 of rib

USACO Superprime Rib(dfs)

题目请点我 题解: 这道题其实很简单,dfs+从前往后判断就好了,每递归一层就进行一次判断. USACO第一章节,最后一发.也是放假回家前的最后一道题!! 代码实现: /* ID: eashion LANG: C++ TASK: sprime */ #include <iostream> #include <cstdio> #include <cstdlib> #include <cstring> #include <cmath> #define

USACO Section1.5 Superprime Rib 解题报告

sprime解题报告 —— icedream61 博客园(转载请注明出处)------------------------------------------------------------------------------------------------------------------------------------------------[题目] 列出所有N位的超级素数. 所谓超级素数,即指其任意位前缀均为素数.例如7.73.733.7331均为素数,故而7331为超级素数

usaco Superprime Rib

题意是求长度为N,的且,前i(i为,1,2,3.....N-1)位数字构成的数字都是素数的数字 例如2333,其中2,23,233,2333,都是素数 /* ID: modengd1 PROG: sprime LANG: C++ */ #include <iostream> #include <stdio.h> using namespace std; bool IsPrime(int x) { if(x==1) return false; if(x==2) return true

洛谷P1218 [USACO1.5]特殊的质数肋骨 Superprime Rib

P1218 [USACO1.5]特殊的质数肋骨 Superprime Rib 284通过 425提交 题目提供者该用户不存在 标签USACO 难度普及- 提交  讨论  题解 最新讨论 超时怎么办? 题目描述 农民约翰的母牛总是产生最好的肋骨.你能通过农民约翰和美国农业部标记在每根肋骨上的数字认出它们.农民约翰确定他卖给买方的是真正的质数肋骨,是因为从右边开始切下肋骨,每次还剩下的肋骨上的数字都组成一个质数,举例来说: 7 3 3 1 全部肋骨上的数字 7331是质数;三根肋骨 733是质数;二

USACO1.5Superprime Rid[附带关于素数算法时间测试]

题目描述 农民约翰的母牛总是产生最好的肋骨.你能通过农民约翰和美国农业部标记在每根肋骨上的数字认出它们.农民约翰确定他卖给买方的是真正的质数肋骨,是因为从右边开始切下肋骨,每次还剩下的肋骨上的数字都组成一个质数,举例来说: 7 3 3 1 全部肋骨上的数字 7331是质数;三根肋骨 733是质数;二根肋骨 73 是质数;当然,最后一根肋骨 7 也是质数. 7331 被叫做长度 4 的特殊质数.写一个程序对给定的肋骨的数目 N (1<=N<=8),求出所有的特殊质数.数字1不被看作一个质数. 输

COGS 696. [IOI1996][USACO 2.3] 最长前缀

★   输入文件:prefix.in   输出文件:prefix.out   简单对比时间限制:1 s   内存限制:128 MB 描述 USACO 2.3.1 IOI96 在生物学中,一些生物的结构是用包含其要素的大写字母序列来表示的.生物学家对于把长的序列分解成较短的序列(即元素)很感兴趣. 如果一个集合 P 中的元素可以通过串联(元素可以重复使用,相当于 Pascal 中的 “+” 运算符)组成一个序列 S ,那么我们认为序列 S 可以分解为 P 中的元素.元素不一定要全部出现(如下例中B

USACO prefix TrieTree + DP

/* ID:kevin_s1 PROG:prefix LANG:C++ */ #include <iostream> #include <cstdio> #include <string> #include <cstring> #include <vector> #include <map> #include <set> #include <algorithm> #include <cstdlib>