/**
题目:Help Hanzo lightof 1197
链接:https://vjudge.net/contest/154246#problem/M
题意:求一段区间内素数个数,[l,r] 在 [1,1e9] 范围内。r-l<=1e5;
思路:采用和平常筛素数的方法。平移区间即可。 */ #include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <set>
#include <vector>
#include <cmath>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int inf = 0x3f3f3f3f;
const int maxn = 1e5+;
const double eps = 1e-;
ll prime[maxn/];
int flag[maxn], pr;
void init()
{
ll mas = (1LL<<)-;
ll N = sqrt(mas+0.5);
//cout<<"N = "<<N<<endl;
//cout<<"mas = "<<mas<<endl;
for(ll i = ; i<=N; i++){
if(flag[i]==){
for(ll j = i*i; j<=N; j+=i){
flag[j] = ;
}
}
}
pr = ;
for(int i = ; i <= N; i++){
if(flag[i]==){
prime[pr++] = i;
}
}
//cout<<"pr = "<<pr<<endl;
}
int main()
{
int T;
int cas = ;
cin>>T;
init();
while(T--)
{
int l, r;
scanf("%d%d",&l,&r);
memset(flag, , sizeof flag);
int sr = sqrt(r+0.5);
for(int i = ; i<pr&&prime[i]<=sr; i++){
///当l=2147483647 即:2^31 -1 的时候,j=0; 那么j-l<0; Runtime error所以这里要处理一下。改为long long型。
for(ll j = max((l-1)/prime[i]*prime[i]+prime[i],prime[i]*prime[i]); j <= r; j+=prime[i]){
flag[j-l] = 1;
}
}
int cnt = ;
for(ll i = max(l,); i <= r; i++){///当i = r , i++之后,i=0;那么又会重新开始,无线循环。然后导致i-l溢出。改为long long。
if(flag[i-l]==){
cnt++;
}
}
printf("Case %d: %d\n",cas++,cnt);
}
return ;
}

Help Hanzo lightof 1197 求一段区间内素数个数,[l,r] 在 [1,1e9] 范围内。r-l<=1e5; 采用和平常筛素数的方法。平移区间即可。的更多相关文章

  1. LightOj 1197 - Help Hanzo(分段筛选法 求区间素数个数)

    题目链接:http://lightoj.com/volume_showproblem.php?problem=1197 题意:给你两个数 a b,求区间 [a, b]内素数的个数, a and b ( ...

  2. zoj 1610 Count the Colors 【区间覆盖 求染色段】

    Count the Colors Time Limit: 2 Seconds      Memory Limit: 65536 KB Painting some colored segments on ...

  3. M - Help Hanzo LightOJ - 1197 (大区间素数筛法)

    题解:素数区间问题.注意到a和b的范围是1<<31,所以直接暴力打表肯定不可以.如果一个数是合数,他的两个因子要么是两个sqrt(x),要么就分布在sqrt(x)两端,所以我们可以根据sq ...

  4. Help Hanzo (LightOJ - 1197) 【简单数论】【筛区间质数】

    Help Hanzo (LightOJ - 1197) [简单数论][筛区间质数] 标签: 入门讲座题解 数论 题目描述 Amakusa, the evil spiritual leader has ...

  5. 求两条线段交点zz

    "求线段交点"是一种非常基础的几何计算, 在很多游戏中都会被使用到. 下面我就现学现卖的把最近才学会的一些"求线段交点"的算法说一说, 希望对大家有所帮助. 本 ...

  6. 团体程序设计天梯赛-练习集L1-008. 求整数段和

    L1-008. 求整数段和 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 杨起帆 给定两个整数A和B,输出从A到B的所有整数以及这些 ...

  7. *循环-01. 求整数段和【help】

    /* * Main.c * 循环-01. 求整数段和 * Created on: 2014年6月18日 * Author: Boomkeeper ***测试木有通过**** */ #include & ...

  8. MySql 求一段时间范围内的每一天,每一小时,每一分钟

    平常经常会求一段时间内的每一天统计数据,或者每一时点的统计数据.但是mysql本身是没有直接获取时点列表的函数或表.下面是自己用到的一些方法,利用临时变量和一个已存在的比较多数据(这个需要根据实际情况 ...

  9. hdu 5919--Sequence II(主席树--求区间不同数个数+区间第k大)

    题目链接 Problem Description Mr. Frog has an integer sequence of length n, which can be denoted as a1,a2 ...

随机推荐

  1. Nginx实现图片防盗链(referer指令)

    什么是图片盗链   每张图片在浏览器中都有对应的图片地址,在浏览器中输入这个地址是可以直接拿到图片. 图片盗链,就是盗用者在他的站上需要显示我们的图片,他没有把图片拿下来,放到他的服务器上, 而是直接 ...

  2. Nagle算法&&延时确认

    数据流分类 成块数据 交互数据   Rlogin需要远程系统(服务器)回显我们(客户)键入的字符 数据字节和数据字节的回显都需要对方确认 rlogin 每次只发送一个字节到服务器,而Telnet 可以 ...

  3. oracle 对应的JDBC驱动 版本

    Oracle版本 jdk版本 推荐jar包 备注 Oracle 8i JDK 1.1.x classes111.zip   Oracle 8i JDK 1.1.x classes12.zip   Or ...

  4. easyui datagrid checkbox的相关属性整理

    DataGrid其中与选择,勾选相关 DataGrid属性: singleSelect boolean 如果为true,则只允许选择一行. false ctrlSelect boolean 在启用多行 ...

  5. 采用Apache作为WebLogic Server集群的负载均衡器

    强烈建议不要使用WebLogic ClusterServlet作为Proxy进行生产环境的负载均衡, 那个是用来进行集群的功能测试的,Oracle的产品文挡也写得比较清楚. 如果采用软件的负载均衡,可 ...

  6. 纯C实现面向对象之接口编程

    创建如下文件目录 : Shape.h #include <stdlib.h> //接口 #ifndef Interface #define Interface struct #endif ...

  7. 腾讯企业邮箱申请邀请码 F6224C3B

    如果您正好要申请腾讯免费企业邮箱,请使用该邀请码(F6224C3B),帮助我提高限额!!谢谢 如果您正好要申请腾讯免费企业邮箱,请使用该邀请码(F6224C3B),帮助我提高限额!!谢谢 如果您正好要 ...

  8. 淘宝Diamond架构分析

    转载:http://blog.csdn.net/szwandcj/article/details/51165954 早期的应用都是单体的,配置修改后,只要通过预留的管理界面刷新reload即可.后来, ...

  9. .Net 下未捕获异常的处理

    原地址:http://www.cnblogs.com/eaglet/archive/2009/02/17/1392191.html .Net 下未捕获异常的处理 作者:Eaglet 随着.Net技术的 ...

  10. 配置 mybatis的 log4j.properties

    log4j.rootLogger=debug,stdout,logfile ### 把日志信息输出到控制台 ### log4j.appender.stdout=org.apache.log4j.Con ...