题目描述

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

输入输出格式

输入格式:

单独的一行包含N。

输出格式:

按顺序输出长度为 N 的特殊质数,每行一个。

输入输出样例

输入样例#1:

4
输出样例#1:

2333
2339
2393
2399
2939
3119
3137
3733
3739
3793
3797
5939
7193
7331
7333
7393

说明

题目翻译来自NOCOW。

USACO Training Section 1.5

-----------------------------

第一位一定是2,3,5,7 ,以后各位只能是单数,并且不能是5,直接dfs每一位,只要不是prime就退出

用哪个方法判素数呢?

一开始随手打了欧拉筛法,结果MLE+TLE,又改了个朴素算法,结果AC了....

对于n等于8,其实只有4^8=65536次检测,太少了,即使根号n的复杂度,合起来是16777216,欧拉筛法却要10^8

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

于是我开始测速玩,测试环境MacBook Air13

n=1e8,我实现的Euler筛法要跑1.3s左右,Eratosthenes筛法要近3s......然而,朴素竟是1.1s,Miller-Rabin只要0.5s;

Miller-Rabin完虐Euler筛法暂且不说,为什么朴素方法也比Euler筛法快,O(n根号n)与O(n)没法比吧..........这是玄学

n=1e6,Eratosthenes筛法0.5s,Euler筛法0.016s,朴素也在0.016s左右,Miller-Rabin只要0.01s

这是要Eratosthenes筛法情何以堪

------------------------------------------------------------------------------------------------------------------------------------------------------------

[2016-08-19更新]:

都是memset惹的祸,去掉后Eratosthenes n=1e8是2.26s,n=1e6可以0.021s,朴素也是0.021,然而Euler筛法却0.026s还是玄学

------------------------------------------------------------------------------------------------------------------------------------------------------------

 上面说的太乱了,总结一下:

分别是n=1e8 n=1e6

朴素 1.2s 0.03s

Eratosthenes筛法 2.26s 0.021s

Euler筛法 1.4s 0.016s

Miller-Rabin 0.5 0.01

//
// main.cpp
// usaco1.5 superprime rib
//
// Created by abc on 16/8/15.
// Copyright © 2016年 abc. All rights reserved.
// #include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;
const int N=1e8+,L=; int n=,l;
//bool flag[N];int prime[N];
int st[]={,,,},odd[]={,,,},a[L];
//int es(int n){
// int cp=0;
// for(int i=2;i<=n;i++){
// if(!flag[i]) prime[++cp]=i;
// for(int j=1;j<=cp&&prime[j]*i<=n;j++){
// flag[i*prime[j]]=1;
// if(i%prime[j]==0) break;
// }
// }
// return cp;
//}
inline int flag(int n){
int m=sqrt(n)+;
for(int i=;i<=m;i++) if(n%i==) return ;
return ;
}
void dfs(int now,int v){//cout<<now<<"\n";
if(now==l+){
for(int i=;i<=l;i++) printf("%d",a[i]);
printf("\n");
return;
}
for(int i=;i<;i++){
a[now]=odd[i];
if(flag(v*+a[now])==) dfs(now+,v*+a[now]);
}
}
int main(int argc, const char * argv[]) {
cin>>l;
for(int i=;i<=l;i++) n=*n;
//es(n);
for(int i=;i<;i++){
memset(a,,sizeof(a));
a[]=st[i];
dfs(,st[i]);
}
return ;
}

USACO1.5Superprime Rid[附带关于素数算法时间测试]的更多相关文章

  1. nyoj 24-素数距离问题 (素数算法)

    24-素数距离问题 内存限制:64MB 时间限制:3000ms Special Judge: No accepted:21 submit:71 题目描述: 现在给出你一些数,要求你写出一个程序,输出这 ...

  2. 素数算法(Prime Num Algorithm)

    素数算法(Prime Num Algorithm) 数学是科学的皇后,而素数可以说是数学的最为核心的概念之一.围绕素数产生了很多伟大的故事,最为著名莫过于哥德巴赫猜想.素数定理和黎曼猜想(有趣的是,自 ...

  3. 用于.NET环境的时间测试(转)

    用于.NET环境的时间测试   在.NET环境中,衡量运行完整算法所花费的时间长度,需要考虑很多 需要考虑很多种情况 ,如:程序运行所处的线程以及无用单位收集(GC垃圾回收). 在程序执行过程中无用单 ...

  4. 算法时间计算:logA(N)与O(n)

    算法运行时间估算常见O(log(n))log:求对数例:a^b=na为底数,b为n的对数记作:logA(n)=b  ->求N的对数 计算器验算:计算器的log默认以10为底  输入 10,log ...

  5. (工具类)MD5算法|时间格式转换|字符串转数字

    package vote.utils; import java.security.MessageDigest; import java.text.SimpleDateFormat; import ja ...

  6. Java数据结构之算法时间度

    1.度量一个程序(算法)执行时间的两种方法 1)事后统计的方法 这种方法可行, 但是有两个问题:一是要想对设计的算法的运行性能进行评测,需要实际运行该程序:二是所得时间的统计量依赖于计算机的硬件.软件 ...

  7. 求素数的一个快速算法 Python 快速输出素数算法

    思想 以100以内为例. 生成一个全是True的101大小的数组 2开始,遇到2的倍数(4,6,8,10...)都赋值为False 因为这些数字都有因子 2 3开始,遇到3的倍数(6,9,12...) ...

  8. 数据结构和算法 – 番外篇.时间测试类Timing

    public class Timing { //startingTime--用来存储正在测试的代码的开始时间. TimeSpan startingTime; //duration--用来存储正在测试的 ...

  9. 【Miller-Rabin随机判素数算法】

    实用性介绍: #include<bits/stdc++.h> #define go(i,a,b) for(int i=a;i<=b;i++) #define T 5 #define ...

随机推荐

  1. 好文要顶之 --- 简单粗暴地理解 JavaScript 原型链

    原型链理解起来有点绕了,网上资料也是很多,每次晚上睡不着的时候总喜欢在网上找点原型链和闭包的文章看,效果极好. 不要纠结于那一堆术语了,那除了让你脑筋拧成麻花,真的不能帮你什么.简单粗暴点看原型链吧, ...

  2. Sharepoint学习笔记—习题系列--70-576习题解析 -(Q25-Q28)

    Question 25 You are designing a SharePoint 2010 farm in your organization. You need to design the li ...

  3. android listview多视图嵌套多视图

    笔记,listview视图总结 public class HomeEduMoreAdapter extends BaseAdapter { private final String TAG = &qu ...

  4. 你真的了解UIWindow吗?

    一:首先查看一下关于UIWindow的定义 NS_CLASS_AVAILABLE_IOS(2_0) @interface UIWindow : UIView //window的屏幕,默认是 [UISc ...

  5. iOS远程推送原理及实现过程

    ➠更多技术干货请戳:听云博客 推送通知,是现在的应用必不可少的功能.那么在 iOS 中,我们是如何实现远程推送的呢?iOS 的远程推送原理又是什么呢?在做 iOS 远程推送时,我们会遇到各种各样的问题 ...

  6. 单例模式-用GCD实现

    用GCD实现单例模式的步骤: 步骤1. 创建头文件 XZSingleton.h,里面代码如下: // .h文件 #define XZSingletonH(name) + (instancetype)s ...

  7. IOS开发之代理的设计小技巧

    1.关于代理对象的设计小技巧 在设计一个类,需要通过代理和协议来从外部获取需要的动态的数据.那么在这里设计使用代理会有两种方法. <第一种方法> 也是比较常见的: 在你设计的类中,声明一个 ...

  8. windows svn 上传后 自动部署 到web目录下

    第一步 把web目录设置为工作目录 "D:\Program Files (x86)\VisualSVN Server\bin\svn.exe" upgrade "D:\y ...

  9. apache 虚拟ip

    参考 http://blog.sina.com.cn/s/blog_5d8ca1e90100hnpv.html <VirtualHost 127.0.0.1:80>      Docume ...

  10. js 模仿块级作用域(私有作用域)、私有变量

    function outputNumbers(count){ var privateVariable = 10;//私有/局部变量,函数外部不能被访问 publicVariable = 20;//全局 ...