题意:求[m,n]之间的素数,其中1 <= m <= n <= 1000000000, n-m<=100000

思路:用分段筛选法,先求出[1,sqrt(n)]之间的素数,然后删除[m,n]中能被[1,sqrt(n)]区间素数的整数倍的数据

代码如下:

import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.io.BufferedReader;
import java.io.PrintWriter;
import java.io.IOException;
import java.io.StreamTokenizer;
import java.util.List;
import java.util.ArrayList;public class Main{private StreamTokenizer cin;private PrintWriter cout;private static final boolean DEBUG = false;private int m, n;private boolean[] vis;private void init(){try{if (DEBUG){cin = new StreamTokenizer(new BufferedReader(new InputStreamReader(new FileInputStream("e:\\program\\idea\\spoj\\spoj.txt"))));}else{cin = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));}cout = new PrintWriter(System.out);}catch (IOException e){e.printStackTrace();;}}private Integer nextInt(){try{cin.nextToken();if (cin.ttype == StreamTokenizer.TT_EOF) return null;else if (cin.ttype == StreamTokenizer.TT_NUMBER) return (int)(cin.nval);else return null;}catch(Exception e){e.printStackTrace();return null;}}private void input(){m = nextInt();n = nextInt();}private void solve(int t){int delta = (int)Math.sqrt(n);vis = new boolean[delta + 1];List<Integer> primes = new ArrayList<>();for (int i = 2; i <= delta; i++){if (!vis[i]){primes.add(i);}int size = primes.size();for (int j = 0; j < size && i * primes.get(j) <= delta; j++){vis[i * primes.get(j)] = true;if (i % primes.get(j) == 0) break;}}if (m < 2) m = 2;vis = new boolean[n - m + 1];int size = primes.size();for (int i = 0; i < size; i++){int start = primes.get(i);if (m % primes.get(i) == 0){start = Math.max(start, m / primes.get(i));}else{start = Math.max(start, m / primes.get(i) + 1);}int cur = primes.get(i);for (int j = start * cur; j <= n; j += cur){vis[j - m] = true;}}for (int i = 0; i < vis.length; i++){if (!vis[i]){cout.println(m + i);}}if (t != 0) cout.println();cout.flush();}public void run() {init();int t = nextInt();while (t-- > 0) {input();solve(t);}}public static void main(String[] args){new Main().run();}
}

spoj2 Prime Generator相关推荐

  1. SPOJ Python Day2: Prime Generator

    2. Prime Generator 任务很简单,生成m到n之间的所有质数.一个比较常见的思路是: 自然数$1, 2, -, N$中的最大的质因子要小于$\sqrt{N}$.所以用m到n中的每一个数去 ...

  2. spoj 2 Prime Generator

    题目:Prime Generator 思路:分段筛素数 #include <cstdio> #include <iostream> #include <cmath> ...

  3. Open***异地机房互连以及负载均衡高可用解决方案

    架构方案如下: ---Open××× server 搭建部署 1.在Open×××-1 server上安装流程 (1.添加epel源 [root@ShangHai-×××-1 ~]# yum inst ...

  4. nodeJS之crypto加密

    加密模块提供了 HTTP 或 HTTPS 连接过程中封装安全凭证的方法.也提供了 OpenSSL 的哈希,hmac, 加密(cipher), 解密(decipher), 签名(sign) 和 验证(v ...

  5. 在 SUSE 11 sp2 上安装 freeradius

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html 内部邀请码:C8E245J (不写邀请码,没有现金送) 国 ...

  6. c++并发编程实战_Java 并发编程实战:JAVA中断线程几种基本方法

    一个多线程Java程序,只有当其全部线程执行结束时(更具体地说,是所有非守护线程结束或者某个线程调用system.exit()方法的时候) ,才会结束运行.有时,为了终止程序或者取消一个线程对象所执行 ...

  7. Open*** 服务器的搭建

    服务介绍 ×××直译就是虚拟专用通道,是提供给企业之间或者个人与公司之间安全数据传输的隧道,Open×××无疑是Linux下开源×××的先锋,提供了良好的性能和友好的用户GUI.它大量使用了OpenS ...

  8. 基于Linux的 Open×××网络之网络架构应用实例

    基于Linux的 Open×××网络之网络架构应用实例 Open××× 概述 Open××× 是一个开源的加密隧道构建工具,基于 OpenSSL 的 SSL/TLS 协议,可以在 Internet中实 ...

  9. java 多线程统计质数,Java 七 多线程计算某个范围内的质数

    Java 7 多线程计算某个范围内的质数 不多说了,看代码 通用类 package java7.concurrency.math; /** * This class generates prime n ...

最新文章

  1. bitMap保存图片
  2. 小米手机qq不读取相册照片_小米手机越用越卡怎么办?
  3. PurdueUCLA提出梯度Boosting网络,效果远好于XGBoost模型!
  4. php 数组元素分类,数组分类、定义及遍历
  5. 合成视频以假乱真新高度!商汤科技、中科院、南洋理工大学联合提出当前最高清的语音驱动视频生成系统...
  6. 一致性哈希和哈希槽对比
  7. redis:set数据类型和操作
  8. hadoop误删除文件
  9. 线程间通信 1全局变量2当前主对话框指针3发消息方式4 AfxBeginThread的返回值(为CWinThread类型的指针)5AfxGetApp...
  10. RTI_DDS自定义插件开发 1
  11. testbench——信号的产生
  12. python中random.sample()函数
  13. 如何让3ds Max 2016导入smd文件
  14. 飞桨PP-HumanSeg本地实时视频推理代码解读
  15. 抖音短视频怎样引流?有哪些方法?
  16. 吉时利Keithley软件2400|2440|2450|2460|2461|2470 NS-SourceMeter源表软件
  17. 1079: 统计方形
  18. NCF(Neural Collaborative Filtering)——协同过滤与神经网络的结合
  19. 考注会会经常用计算机吗,注会机考系统计算器你会用吗?操作技巧抢先看!
  20. CentOS 离线安装 postgresql 12

热门文章

  1. c#中反射技术在Unity中的运用
  2. Linux 下zip包的压缩与解压
  3. 如何禁用双击窗体图标关闭窗体
  4. Item 36. Class-Specific Memory Management
  5. python软件包自带的集成开发环境-Python的10大集成开发环境和代码编辑器(指南)...
  6. java好还是python好-Python和Java哪个薪资更高、远景更好?
  7. python编程语法-Python学习笔记(Ⅰ)——Python程序结构与基础语法
  8. 机器人编程语言python-机器人编程语言有哪些?
  9. python常见错误-Python 常见报错类型
  10. python魔力手册-小白入门宝典:Python快速入门魔力手册 PDF 超清版