LightOJ 1197 LightOJ 1197(大区间素数筛选)
http://lightoj.com/volume_showproblem.php?problem=1197
题目大意:
就是给你一个区间[a,b]让你求这个区间素数的个数
但a、b的值太大没法直接进行素数筛选(没法开那么大的数组),我们可以将a当做0,将b当做b-a
这样求[a,b]之间就变成了求[0, b - a]之间,这样就可以开数组来筛选
下图是代码式子j = j + prime[i] - a % prime[i]的由来
- #include<stdio.h>
- #include<math.h>
- #include<string.h>
- #include<stdlib.h>
- #include<algorithm>
- using namespace std;
- const int N = 1e5 + ;
- const int INF = 0x3f3f3f3f;
- typedef long long ll;
- int prime[N], f[N], k;
- bool Isprime[N];
- void Prime()
- {
- k = ;
- memset(Isprime, true, sizeof(Isprime));
- Isprime[] = false;
- for(int i = ; i < N ; i++)
- {
- if(Isprime[i])
- {
- prime[k++] = i;
- for(int j = ; i * j < N ; j++)
- Isprime[i * j] = false;
- }
- }
- }//先用素数筛选法筛选出小范围的素数
- int main()
- {
- int t, a, b, p = ;
- scanf("%d", &t);
- Prime();
- while(t--)
- {
- p++;
- memset(f, , sizeof(f));
- int num = ;
- scanf("%d%d", &a, &b);
- int l = b - a;//将a到b转化为从0到b - a
- for(int i = ; i < k && prime[i] * prime[i] <= b ; i++)
- {
- int j = ;
- if(a % prime[i] != )//判断a + j 如果(a + j)% prime[i] != 0,则将a + j筛除
- j = j + prime[i] - a % prime[i];
- if(a + j == prime[i])//如果a + j是素数,则找下一个
- j += prime[i];
- for(; j <= l ; j += prime[i])
- f[j] = ;//从j开始将含prime[i]因子的数标记(即筛除)
- }
- for(int i = ; i <= l ; i++)
- if(!f[i])
- num++;
- if(a == )//如果a从1开始,需要减去一个
- num--;
- printf("Case %d: %d\n", p, num);
- }
- return ;
- }
LightOJ 1197 LightOJ 1197(大区间素数筛选)的更多相关文章
- LightOj 1197 Help Hanzo (区间素数筛选)
题目大意: 给出T个实例,T<=200,给出[a,b]区间,问这个区间里面有多少个素数?(1 ≤ a ≤ b < 231, b - a ≤ 100000) 解题思路: 由于a,b的取值范围 ...
- LightOJ1197 Help Hanzo —— 大区间素数筛选
题目链接:https://vjudge.net/problem/LightOJ-1197 1197 - Help Hanzo PDF (English) Statistics Forum Tim ...
- LightOJ 1197 Help Hanzo(区间素数筛选)
E - Help Hanzo Time Limit:2000MS Memory Limit:32768KB 64bit IO Format:%lld & %llu Submit ...
- 大区间素数筛选 POJ2689
题意: 给一个区间[L,U],(1<=L< U<=2,147,483,647),U-L<=1000000,求出[L,U]内距离近期和距离最远的素数对. 因为L,U都小于2^32 ...
- 大区间素数筛选(POJ 2689)
/* *POJ 2689 Prime Distance *给出一个区间[L,U],找出区间内容.相邻的距离最近的两个素数和距离最远的两个素数 *1<=L<U<=2147483647 ...
- 2017ACM暑期多校联合训练 - Team 4 1003 HDU 6069 Counting Divisors (区间素数筛选+因子数)
题目链接 Problem Description In mathematics, the function d(n) denotes the number of divisors of positiv ...
- M - Help Hanzo LightOJ - 1197 (大区间素数筛法)
题解:素数区间问题.注意到a和b的范围是1<<31,所以直接暴力打表肯定不可以.如果一个数是合数,他的两个因子要么是两个sqrt(x),要么就分布在sqrt(x)两端,所以我们可以根据sq ...
- poj 2689 Prime Distance(大区间素数)
题目链接:poj 2689 Prime Distance 题意: 给你一个很大的区间(区间差不超过100w),让你找出这个区间的相邻最大和最小的两对素数 题解: 正向去找这个区间的素数会超时,我们考虑 ...
- Prime Count 求大区间素数个数
http://acm.gdufe.edu.cn/Problem/read/id/1333 https://www.zhihu.com/question/29580448/answer/44874605
随机推荐
- js格式化时间 js格式化时间戳
一个js格式化时间和js格式化时间戳的例子. 代码:/** * 时间对象的格式化; */Date.prototype.format = function(format) { /* * eg:forma ...
- Oracle安装过程出现问题---------安装Oracle11gR2先决条件检查失败
一.错误信息当安装到“先决条件检查” 时,提示如下图所示的错误: 二.错误原因一般情况下,由于操作系统未开启默认共享,导致Oracle无法检查环境的可用性. 三.解决方法1.在运行中(或键盘按 Win ...
- 记一次结巴分词.net core 2.0版 nuget发布过程
最近用到分词考虑很久,选用了结巴分词,原因见博客Lucene.net(4.8.0) 学习问题记录五: JIEba分词和Lucene的结合,以及对分词器的思考 既然选好了,难就开始行动吧 . 查了.ne ...
- Word编写代码时输出半角引号
工具--自动更正选项--键入时自动套用格式,去掉直引号替换为弯引号.
- mysql5.7 初始化启动
root@0f6852dfee81:/# mysql --versionmysql Ver 14.14 Distrib 5.7.18-16, for debian-linux-gnu (x86_64 ...
- go_组合接口
main函数入口 package main import ( "fmt" "learngo/retriever/mock" "learngo/retr ...
- jdk版本问题
今天遇到很郁闷的问题jdk 版本是1.6 如何设置1.8 记录一下 可以设置环境变量设置jdk版本问题再就是在 1.java工具设置jdk版本问题 2.grandle 设置要注意 3.生成环境设置j ...
- centos6.5下使用yum完美搭建LNMP环境(php5.6)
准备工作 配置防火墙,开启80端口.3306端口删除原有的 iptables , 添加合适的配置 rm -rf /etc/sysconfig/iptables vi /etc/sysconfig/ip ...
- golang之数组
1.数组:同一种数据类型的固定长度的序列. 2.数组定义:var a [len]int,例如:var a [5]int 3.长度是数组类型的一部分,因此,var a[5] int 和 var a[10 ...
- php快速获取所有的自定义常量用户常量
快速获取自定义的常量.用户常量 echo "<pre>"; print_r(get_defined_constants(true)['user']); echo &qu ...