超时代码:

#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. TCP/IP 协议(摘抄)

    TCP/IP 协议 TCP/IP 是不同的通信协议的大集合. 协议族 TCP/IP 是基于 TCP 和 IP 这两个最初的协议之上的不同的通信协议的大集合. TCP - 传输控制协议 TCP 用于从应 ...

  2. JMM内存管理

    原文地址http://www.cnblogs.com/BangQ/p/4045954.html 原本准备把内存模型单独放到某一篇文章的某个章节里面讲解,后来查阅了国外很多文档才发现其实JVM内存模型的 ...

  3. A. Alyona and Numbers(CF ROUND 358 DIV2)

    A. Alyona and Numbers time limit per test 1 second memory limit per test 256 megabytes input standar ...

  4. java 移位运算

    移位运算 :将整数转化为二进制(以补码的形式),按位平移. <<     左移 >>     右移 >>>   无符号右移 << 右移: 按位做平 ...

  5. link 与 @import之对比

    页面中使用CSS的方式主要有3种:行内添加定义style属性值,页面头部内嵌调用和外面链接调用,其中外面引用有两种:link和@import.外部引用CSS两种方式link和@import的方式分别是 ...

  6. Linux后门账户控制

    赋予用户sudo权限 vi /etc/sudoers 添加如下一行: USER ALL=(ALL) NOPASSWD: ALL (实现当前用户允许转换成任意用户及执行任意命令) 添加root权限账户 ...

  7. html5权威指南:表单元素

    一.表单标签: 表单标签:http://blog.csdn.net/mylovestart/article/details/8589002 html5新增表单元素: 1.datalist:http:/ ...

  8. js 上传图片预览

    <script language='javascript'> function show(){ var p=document.getElementById("file1" ...

  9. queue STL

    //queue STL //queue is just a container adaptor, which is a class that use other container. //just l ...

  10. lua中获取时间

    os.date()    返回  XX/XX/XX XX:XX:XX 月/日/年    时:分:秒 os.time()   返回的是从1970年1月1日到现在的经过的秒数. 例如: print(os. ...