超时代码:

#include <iostream>

using namespace std;
//写一个函数判断是否是素数
bool isPrime(int num)
{int i=2;//cout<<"OK2";
for(;i*i<=num;i++){
if(num%i==0)break;
}
if(i*i>num)return true;
else return false;
}

int main()
{

int T;
cin>>T;

for(int j = 1;j <= T; j++){
int aim;
cin>>aim;

int count = 2;

if(isPrime(aim)){

cout<<0<<endl;
}
else{
for(int i = aim-1;;i--){if(isPrime(i))break;
else count++;}
for(int i = aim+1;;i++){if(isPrime(i))break;
else count++;}

cout<<count<<endl;
}
}
return 0;
}

超时原因是因为每次都单独去判断是否是素数,最后就在有大量素数时没法处理了

然后通过建立一个很大的bool型数组的方式将问题解决了

AC代码:

#include <iostream>

using namespace std;

bool * zhangjie=new bool [1299710];//首先是申请和分配空间的一个操作

int main()
{
for(int p=1;p<=1299710;p++){
zhangjie[p]=true;
}//这是进行初始化的一个操作

for(int i=2;i<1299710;i=i+1)
{
if(zhangjie[i]){
for(int j=i+i;j<=1299710;j=j+i)
zhangjie[j]=false;
}
}
int T;
cin>>T;

for(int j = 1;j <= T; j++){
int aim;
cin>>aim;

int count = 2;

if(zhangjie[aim]){

cout<<0<<endl;
}
else{
for(int i = aim-1;;i--){if(zhangjie[i])break;
else count++;}
for(int i = aim+1;;i++){if(zhangjie[i])break;
else count++;}

cout<<count<<endl;
}
}
return 0;
}

//今天讲课又有新的东西添加进来了

int prime[5500],tot;

bool isprime[50001];

void init()//先处理出50000以内的质数,可用来筛INT以内的质数

{ tot = 0;

memset(isprime, true, sizeof(isprime));

prime[tot++] = 2;

for(int i = 3; i < 50000; i += 2)

{ if(isprime[i])

{ prime[tot++] = i;

if(i * i < 50000)

{ for(int j = i + i; j < 50000; j += i)

isprime[j] = false; }

}

}

}

//就这个东西我们可以知道,整个过程中被命名为筛法求素数。

相对于以前的素数打表法,它的优点在于因为已经确定2是素数,除了2以外的其它偶数都是合数

所以优化后的结果就是每次的访问增量都为2

还有一个就是利用了

bool pd2(int x){    if(x==1)return false;    for(int i=0;prime[i]*prime[i]<=x;i++)        if(x%prime[i]==0)return false;    return true;}我们现在只使用事先筛好的素数来验证一个较大数是否是素数。优化了多少?

100000以内的素数:9592个。和原版本相比较,大概优化了10倍的速度。

素数槽csuoj的更多相关文章

  1. CSU1030素数槽

    Description 处于相邻的两个素数p和p + n之间的n - 1个连续的合数所组成的序列我们将其称为长度为n的素数槽.例如,‹24, 25, 26, 27, 28›是处于素数23和素数29之间 ...

  2. csu 1030: 素数槽

     素数槽 Description 处于相邻的两个素数p和p + n之间的n - 1个连续的合数所组成的序列我们将其称为长度为n的素数槽.比如,‹24, 25, 26, 27, 28›是处于素数23 ...

  3. Boost信号/槽signals2

    信号槽是Qt框架中一个重要的部分,主要用来解耦一组互相协作的类,使用起来非常方便.项目中有同事引入了第三方的信号槽机制,其实Boost本身就有信号/槽,而且Boost的模块相对来说更稳定. signa ...

  4. Help Hanzo (素数筛+区间枚举)

    Help Hanzo 题意:求a~b间素数个数(1 ≤ a ≤ b < 231, b - a ≤ 100000).     (全题在文末) 题解: a~b枚举必定TLE,普通打表MLE,真是头疼 ...

  5. qt5中信号和槽的新语法

    qt5中的连接 有下列几种方式可以连接到信号上 旧语法 qt5将继续支持旧的语法去连接,在QObject对象上定义信号和槽函数,及任何继承QObjec的对象(包含QWidget). connect(s ...

  6. Java 素数 prime numbers-LeetCode 204

    Description: Count the number of prime numbers less than a non-negative number, n click to show more ...

  7. 求解第N个素数

    任务 求解第 10,0000.100,0000.1000,0000 ... 个素数(要求精确解). 想法 Sieve of Eratosthenes 学习初等数论的时候曾经学过埃拉托斯特尼筛法(Sie ...

  8. 使用BitArray判断素数

    首先显示1024范围内的所有素数,然后显示输入的数是否是素数.1024 是代码中计算的素数的范围,可以修改.计算平方根,是为了确定一个基数的范围.1024的平方根是32,两个超过32 的数相乘,肯定大 ...

  9. Qt信号与槽自动关联机制

    参考链接1:http://blog.csdn.net/skyhawk452/article/details/6121407 参考链接2:http://blog.csdn.net/memory_exce ...

随机推荐

  1. python修炼6

    文件操作 注:不能把open语句放在try块里,因为当打开文件出现异常时,文件对象file_object无法执行close()方法. 1.打开文件 (相当于桌面的快捷方式)f=open(文件名,模式默 ...

  2. es6 语法

    1.定义变量 使用let,const.let可以定义变量,相当于var,定义的变量只在局部范围内使用.const用来定义常量. 2.解构 自动解析数组或者对象中的值,比如一个函数要返回多个值,通常的做 ...

  3. tflearn save模型异常

    存储模型始终无法形成单个文件,最初以为是机器中间断电\休眠引起的,重复了3次之后,发现这个问题一直存在.(每一次都要跑8~9个小时啊,摔...) 解决办法:tensorflow的版本回退到0.11版 ...

  4. mysql索引类型-形式-使用时机-不足之处--注意事项

    一.索引的类型 1.普通索引   增加 create  index  index_name on table(colume(length));                       例子:cre ...

  5. Base64编码 图片与base64编码互转

    package com.education.util; import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder; import jav ...

  6. UVALive 6911 Double Swords (Set,贪心,求区间交集)

    补:华中VJ这个题目很多标程都不能AC了,包括我下面原本AC了的代码,再交就WA掉了,感觉是样例有问题呢-- 首先左边的是必须要选的,然后右边的需要注意,有些区间是可以舍掉的.1.区间里有两个不同的A ...

  7. openstack私有云布署实践【3 keepalive配置(VRRP虚IP)】

    这里只用到keepalived 或者pacemaker两种方法,可二选一来配置,官方提供的是pacemaker,但我们实际测试环境和生产环境上使的是keepalive     首先在4台control ...

  8. 【留念贴】Android开发——计算器

    [过程] 在电商学霸&&代码女神XuFei的影响下,接触到了关于Android客户端的一些开发,第一次在Android平台搞出了一个App,真的是激动不已,所以必须开个留念贴记录一下. ...

  9. 4、File类之获取方法

    这些方法也都是File类内置的成员方法,无需我们写,直接拿来用即可. 基本获取 public class Demo { public static void main(String[] args) { ...

  10. tomcat 启动超时

    1.如果是eclipse 里集成的tomcat  在server 下 双击tomcat 在tomcat 配置里将启动时间延长,保存再启动. 2.如果是非集成的tomcat  则在tomcat的配置文件 ...