题目描述

农民约翰的母牛总是产生最好的肋骨。你能通过农民约翰和美国农业部标记在每根肋骨上的数字认出它们。农民约翰确定他卖给买方的是真正的质数肋骨,是因为从右边开始切下肋骨,每次还剩下的肋骨上的数字都组成一个质数,举例来说: 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. 乱码之MyEclipse控制台

    今天突然发现控制台出现乱码,查了资料解决方案不一. 我的解决方案如下: Run -> Debug Configuration... -> MyEclipse Servler -> M ...

  2. JavaScript学习笔记-JSON对象

    JSON 是一种用来序列化对象.数组.数值.字符串.布尔值和 null 的语法.它基于 JavaScript 语法,但是又有区别:一些 JavaScript 值不是 JSON,而某些 JSON 不是 ...

  3. Atitit.Atiposter 发帖机 信息发布器 v7 q516

    Atitit.Atiposter 发帖机 信息发布器 v7 q516 V7 jetty 版本 基本访问改为web版. 这样发布调试 V1  初步实现sina csdn cnblogs V2  实现qz ...

  4. 解决在使用client object model的时候报“object does not belong to a list”错误

    在查看别人代码的时候,发现了个有意思的问题,使用client object model将一个文件check in 我使用的是如下语句获取file Microsoft.SharePoint.Client ...

  5. 关于JNI的使用方法

    1首先在java里面定义你需要的native方法 2打开cmd,进入doc窗口,如果是android项目就进入到你当前项目的bin目录下,在doc里面输入cd E:\workspace\Test1 也 ...

  6. java你可能不知道的事(2)--堆和栈

    在java语言的学习和使用当中你可能已经了解或者知道堆和栈,但是你可能没有完全的理解它们.今天我们就一起来学习堆.栈的特点以及它们的区别.认识了这个之后,你可能对java有更深的理解. Java堆内存 ...

  7. [Android] android .keystore文件转x509pem工具

    .keystore是android的签名文件,最近在做联通联运的时候,发现他们需要上传x509pem格式的文件来签名所以就研究了一下如何转化 方法一:使用openssl的方法 http://blog. ...

  8. [转]三大WEB服务器对比分析(apache ,lighttpd,nginx)

    原博文地址:http://www.blogjava.net/daniel-tu/archive/2008/12/29/248883.html 一.软件介绍(apache  lighttpd  ngin ...

  9. JS中的事件

    事件中的几种实现方式 Dom0时代 1.直接在html的属性中写JS代码 <div onclick="alert(4);">Div1 Element</div&g ...

  10. H5一二事

    先回顾一下WEB技术的几个阶段 Web 1.0 内容为主,主要流行HTML和CSS Web 2.0 动态网页,流行AJAX/JavaScript/DOM H5 时代,WEB开发回归富客户端 那么H5肯 ...