题目

题目描述

超级素数的定义如下:如果有个素数我们从右往左依次去掉一位数,每次去掉一位数剩下的数仍然是素数,那么我们称这个数是超级素数。例如7331,这是一个素数,从右往左依次去掉一位数733, 73, 7,这些数字仍然是素数,所以7331是一个超级素数。

输入一个数字n (1<=n<=8),代表要找的超级素数的长度。现在需要按照从小到大排序的所有长度为n的超级素数。

样例输入

  1. 4

样例输出

  1. 2333
  2. 2339
  3. 2393
  4. 2399
  5. 2939
  6. 3119
  7. 3137
  8. 3733
  9. 3739
  10. 3793
  11. 3797
  12. 5939
  13. 7193
  14. 7331
  15. 7333
  16. 7393

解题思路

因为数据量不大所以我们直接搜索出所有的长度为n的数,然后判断是否是超级素数。在搜索时,我们可以从左往右开始枚举,每次产生一个数,我们就立刻进行素数判断。如果不是素数,那么就没必要接着枚举了,这是一个剪枝的方法。例如我们需要产生一个4位数,我现在已经产生了前两位21,判断21不是素数,所以没必要接着往下枚举了。

解题代码

  1. /*
  2. ID: yinzong2
  3. PROG: sprime
  4. LANG: C++11
  5. */
  6. #define MARK
  7. #include <iostream>
  8. #include <cstdlib>
  9. using namespace std;
  10. int n;
  11. char buf[10];
  12. bool isPrime() {
  13. int val = atoi(buf);
  14. if (1 == val) return false;
  15. if (2 == val) return true;
  16. if (0 == (val%2)) return false;
  17. for (int i = 3; i*i <= val; i += 2) {
  18. if (0 == (val%i)) {
  19. return false;
  20. }
  21. }
  22. return true;
  23. }
  24. void produceSPrime(int idx) {
  25. if (idx == n) {
  26. cout << buf << endl;
  27. return ;
  28. }
  29. int i = 0;
  30. if (idx == 0) i++;
  31. for (; i <= 9; ++i) {
  32. char c = i+'0';
  33. buf[idx] = c;
  34. buf[idx+1] = '\0';
  35. if (isPrime()) { // 剪枝
  36. produceSPrime(idx+1);
  37. }
  38. }
  39. }
  40. int main() {
  41. #ifdef MARK
  42. freopen("sprime.in", "r", stdin);
  43. freopen("sprime.out", "w", stdout);
  44. #endif // MARK
  45. while (cin >> n) {
  46. produceSPrime(0);
  47. }
  48. return 0;
  49. }

USACO Section 1.5 Superprime Rib 解题报告的更多相关文章

  1. USACO Section1.5 Superprime Rib 解题报告

    sprime解题报告 —— icedream61 博客园(转载请注明出处)--------------------------------------------------------------- ...

  2. USACO Section 1.3 Prime Cryptarithm 解题报告

    题目 题目描述 牛式的定义,我们首先需要看下面这个算式结构: * * * x * * ------- * * * <-- partial product 1 * * * <-- parti ...

  3. USACO Section 1.4 Arithmetic Progressions 解题报告

    题目 题目描述 现在给你一个数集,里面的数字都是由p^2+q^2这种形式构成的0 <= p,q <= M,我现在需要你在其中找出一个长为N的等差数列,数列中的第一个数字为a,公差为b,当你 ...

  4. USACO Section 1.3 Combination Lock 解题报告

    题目 题目描述 农夫John的牛从农场逃脱出去了,所以他决定用一个密码锁来把农场的门锁起来,这个密码锁有三个表盘,每个表盘都是环形的,而且上面刻有1~N,现在John设了一个开锁密码,而且这个锁的设计 ...

  5. USACO Section 1.3 Barn Repair 解题报告

    题目 题目描述 某农夫有一个养牛场,所有的牛圈都相邻的排成一排(共有S个牛圈),每个牛圈里面最多只圈养一头牛.有一天狂风卷积着乌云,电闪雷鸣,把牛圈的门给刮走了.幸运的是,有些牛因为放假,所以没在自己 ...

  6. USACO Section 1.3 Mixing Milk 解题报告

    题目 题目描述 Merry Milk Makers 公司的业务是销售牛奶.它从农夫那里收购N单位的牛奶,然后销售出去.现在有M个农夫,每个农夫都存有一定量的牛奶,而且每个农夫都会有自己的定价.假设所有 ...

  7. USACO Section 1.2 Dual Palindromes 解题报告

    题目 题目描述 有一些数(如 21),在十进制时不是回文数,但在其它进制(如二进制时为 10101)时就是回文数. 编一个程序,从文件读入两个十进制数N.S.然后找出前 N 个满足大于 S 且在两种以 ...

  8. USACO Section 1.2 Palindromic Squares 解题报告

    题目 题目描述 输入一个基数B,现在要从1到300之间找出一些符合要求的数字N.如果N的平方转换成B进制数之后是一个回文串,那么N就符合要求.我们将N转换成B进制数输出,然后再将N的平方转换成B进制数 ...

  9. USACO Section 1.2 Milking Cows 解题报告

    题目 题目描述 有3个农夫每天早上五点钟便起床去挤牛奶,现在第一个农夫挤牛奶的时刻为300(五点钟之后的第300个分钟开始),1000的时候结束.第二个农夫从700开始,1200结束.最后一个农夫从1 ...

随机推荐

  1. spring-framework-reference(5.1.1.RELEASE)中文版——Core部分

    前言 最近在学习Spring框架,在学习的同时,借助有道翻译,整理翻译了部分文档,由于尚在学习当中,所以该篇文章将会定时更新,目标在一个月左右时间翻译完全部版本. 虽然大部分内容为翻译,但是其中可能会 ...

  2. codeforces 1140E Palindrome-less Arrays

    题目链接:http://codeforces.com/contest/1140/problem/E 题目大意: 如果一个数组的存在一个奇数长的回文就不好. 不是不好的数组是好的. 你可以把-1用1到k ...

  3. 【视频编解码·学习笔记】13. 提取PPS信息程序

    PPS结构解析 与之前解析SPS方式类似 一.定义PPS类: 在3.NAL Unit目录下,新建PicParamSet.cpp和PicParamSet.h,在这两个文件中写入类的定义和函数实现. 类定 ...

  4. pssh命令详解

    基础命令学习目录首页 原文链接:https://www.cnblogs.com/kevingrace/p/6378719.html pssh提供OpenSSH和相关工具的并行版本.包括pssh,psc ...

  5. 小米6x抓包小程序https请求

    1. charles安装证书,手机设置代理等这里不多讲了, 请进入下面链接查看详细 https://blog.csdn.net/manypeng/article/details/79475870 2. ...

  6. jenkins设置定时任务

    每次都手动的构建项目显然不够方便,有时候需要定时地执行自动化测试脚本.例如,每天晚上定时执行 pjenkins.py 文件来运行自动化测试项目. 设置定时任务 前面已经创建的 “python test ...

  7. 将本地开发完的SDK代码上传到SVN上面:an error occurred while contacting the repository The server may be unreachable or the URL may be incorrect

    将本地开发完的SDK代码上传到SVN上面:an error occurred while contacting the repository  The server may be unreachabl ...

  8. python下graphviz安装

    参考链接:https://blog.csdn.net/u013250416/article/details/72790754 1.安装Graphviz 在graphviz的官网(网址:http://w ...

  9. QQ测试计划

             

  10. C#窗体——四则运算

    用户需求:程序能接收用户输入的整数答案,并判断对错程序结束时,统计出答对.答错的题目数量.补充说明:0——10的整数是随机生成的用户可以选择四则运算中的一种用户可以结束程序的运行,并显示统计结果.在此 ...