USACO Section1.5 Superprime Rib 解题报告
sprime解题报告 —— icedream61 博客园(转载请注明出处)
------------------------------------------------------------------------------------------------------------------------------------------------
【题目】
列出所有N位的超级素数。
所谓超级素数,即指其任意位前缀均为素数。例如7、73、733、7331均为素数,故而7331为超级素数。
【数据范围】
1<=N<=8
【输入样例】
4
【输出样例】
2333
2339
2393
2399
2939
3119
3137
3733
3739
3793
3797
5939
7193
7331
7333
7393
------------------------------------------------------------------------------------------------------------------------------------------------
【分析】
逐位枚举+筛法+试除法。
这道题需要逐位枚举,具体过程描述如下:
1.定义0位的素数只有0(为了编程方便),调用函数go(0,0);
2.函数go(k,x)主体:x是k位的超级素数,枚举y=x*10+i(i=0~9),由筛法所得数组判断,若y为超级素数则调用go(k+1,y);
3.函数go(k,x)边界:当k==N时,输出x并return;
4.函数go(k,x)特判(置于边界判断后):当k==7&&N==8时,枚举y=x*10+i(i=0~9),由试除法判断,若y为超级素数则调用go(k+1,y);
值得一提的是,这里的特判可以大大提高运行效率,大约从2s缩减到0.2s,性价比很高。
------------------------------------------------------------------------------------------------------------------------------------------------
【总结】
又是同样的问题,好奇怪!为什么100,000,000过不了?求解答啊!
我的处理方法是:令max=10,000,000,对于N==8的情况,在枚举到第8位的时候采用试除法判素数。这样便可以过了。
不过这样的处理倒是很不错的,因为这样一来筛法的时间变成了十分之一,而到8位可枚举的数已经少之又少,所以程序的运行效率提高极为显著。原来代码运行时间是2s+,现在只有不到0.2s了。学习了!
------------------------------------------------------------------------------------------------------------------------------------------------
【代码】
/*
ID: icedrea1
PROB: sprime
LANG: C++
*/ #include <iostream>
#include <fstream>
#include <cmath>
using namespace std; const int maxd = ;
bool d[+maxd]; int N; bool isPrime(int x)
{
for(int i=;i<=sqrt(x);++i)
if(x%i==) return false;
return true;
} void go(int k,int x,ofstream &out)
{
if(k==N) { out<<x<<endl; return; }
x*=;
if(N== && k==)
{
for(int i=;i<=;++i)
if(isPrime(x+i)) go(k+,x+i,out);
return;
}
for(int i=;i<=;++i)
if(!d[x+i]) go(k+,x+i,out);
} int main()
{
ifstream in("sprime.in");
ofstream out("sprime.out"); d[]=d[]=true;
for(int i=;i<=;++i)
if(!d[i])
for(int j=i+i;j<=maxd;j+=i) d[j]=true; in>>N; go(,,out); in.close();
out.close();
return ;
}
USACO Section1.5 Superprime Rib 解题报告的更多相关文章
- USACO Section1.5 Prime Palindromes 解题报告
pprime解题报告 —— icedream61 博客园(转载请注明出处)--------------------------------------------------------------- ...
- USACO Section1.5 Number Triangles 解题报告
numtri解题报告 —— icedream61 博客园(转载请注明出处)--------------------------------------------------------------- ...
- USACO Section1.4 Arithmetic Progressions 解题报告
ariprog解题报告 —— icedream61 博客园(转载请注明出处)-------------------------------------------------------------- ...
- USACO Section1.3 Combination Lock 解题报告
combo解题报告 —— icedream61 博客园(转载请注明出处)---------------------------------------------------------------- ...
- USACO Section1.3 Prime Cryptarithm 解题报告
crypt1解题报告 —— icedream61 博客园(转载请注明出处)--------------------------------------------------------------- ...
- USACO Section1.3 Barn Repair 解题报告
barn1解题报告 —— icedream61 博客园(转载请注明出处)---------------------------------------------------------------- ...
- USACO Section1.3 Mixing Milk 解题报告
milk解题报告 —— icedream61 博客园(转载请注明出处)----------------------------------------------------------------- ...
- USACO Section1.2 Palindromic Squares 解题报告
palsquare解题报告 —— icedream61 博客园(转载请注明出处)------------------------------------------------------------ ...
- USACO Section1.2 Dual Palindromes 解题报告
dualpal解题报告 —— icedream61 博客园(转载请注明出处)-------------------------------------------------------------- ...
随机推荐
- php:定义时间跳转到指定页面
我们想要定义延迟时间,再跳转到指定页面,只要用header()即可,语法: header("Refresh:延迟时间;url=要跳转的页面"); 例子: 注意注意:我们在heade ...
- vm中efi模式安装windows10
选择dvd: 界面出现“Press any key to boot from CD or DVD”时,再迅速按下任意键就OK了.
- 如何使用ABSL代码调用Web service
需求:在C4C UI里创建web service(maintain ticket),然后通过ABSL代码消费. 1. 创建一个新的Communication Arrangement 基于Manage ...
- CRUD全栈式编程架构之界面层的设计
Layout的设计 模板模式 mvc的模板特别类似设计模式中模板方法模式,结合Layout中RenderSection和RenderBody方法可以将部分html展现逻辑延迟到具体的视图页面去实现里面 ...
- IOS TableView代理设置 table的行高
// 设置行高(每一行的高度一致) self.tableView.rowHeight = ; self.tableView.delegate = self; #pragma mark - 代理方法 / ...
- 2018.8.17 关于JavaScript的几种常见的全局函数
JavaScript常见的全局函数 <!doctype html> <html lang="en"> <head> <meta chars ...
- Knockout 事件传递参数的方法
在Knockout中直接使用函数传递参数是不行的,会导致函数在初始化时就被调用. 要实现参数的传递,有2种方法: 1.方法一:使用函数包裹 <div data-bind="event: ...
- django中csrftoken跨站请求伪造的几种方式
1.介绍 我们之前从前端给后端发送数据的时候,一直都是把setting中中间件里的的csrftoken这条给注释掉,其实这个主要起了一个对保护作用,以免恶意性数据的攻击.但是这样直接注释掉并不是理智型 ...
- jsonp 请求和回传实现
JSONP最主要的是可以解决跨域问题,不然谁会没事用这种格式. 下面是我用JSONP的一些心得体会: JSONP是JSON with Padding的略称.它是一个非官方的协议,它允许在服务器端集成S ...
- java 打印流 递归复制子文件子文件夹 不同编码文件复制到同一文件中 序列化流反序列化流
package com.swift.jinjie; import java.io.BufferedInputStream; import java.io.File; import java.io.Fi ...