【代码超详解】LightOJ 1197 Help Hanzo(区间质数筛法)

模拟IC版图DRC实战:手把手教你搞定MIM电容天线错误和ESD.10g违例 本文深入解析模拟IC版图中的MIM电容天线错误和ESD.10g违例问题,提供从错误解码到实战修复的完整指南。通过电路图修改、版图优化和验证闭环等步骤,帮助工程师高效解决DRC错误,特别适用于ADC等精密模拟电路设计。文章还分享了高级排错技巧和预防性设计策略,大幅提升流片成功率。 阅读详情

一、题目描述

在这里插入图片描述

二、算法分析说明与代码编写指导

对于求指定区间 [a, b] 的质数的题目,通常 a 和 b 都比较大,而 b - a 不太大。
采用埃氏筛或者欧拉筛的代码,一般都会同时给出前若干个质数。如果有 m 个不超过 n 的数要判断是否为质数,最坏情况下的时间复杂度为
在这里插入图片描述
π(n) 为不大于 n 正整数中的质数数量。
在本例中,可以代入最坏情况 m = 100001,n = 2^31,得数据规模约为 4.3e+8。
当然,有很多数会在用很小的质数试除的时候就发现可以整除,从而被直接筛掉,不用再继续使用更大的质数试除。例如扣除仅用2、3、5、7、11、13、17、19 中的一个或几个质数就能筛掉的数,就足以使该规模大大减小。只是,这样的程度还不够。如果直接用这样的算法对每个区间的数进行逐个判断(最多有 200 组数据),还是会超时。
下面我们介绍区间筛法。本题中,由于区间的右端点 b 不超过 2^31 - 1,区间长度不超过 1e5 + 1,而判定 2^31 - 1 以内的质数,查表得至少需要打前 4792 个质数,打表范围内的最大质数为 46337。
在这里插入图片描述
然而,提交以后返回 Runtime Error,原因尚不明确。因此最终给出的 AC 代码中,数组开得大一些。
能不能用欧拉筛法直接打表直到区间右端点然后 O(1) 判断区间内的数呢?也是不可以的,因为打表范围还是太大了。
所以我们只能打表到 根号b 的位置,然后技巧性地判断区间内的数到底是不是质数。不过,不可以用欧拉筛直接判断,因为欧拉筛法筛去合数必须严格地从 1 开始向后递推,而不能跳过中间的任何区间直接判断更大的数。所以我们需要采用埃氏筛法,在区间内一个一个筛去试除质数的倍数。
设一个 bitset iscompo 代表区间内的数是否为合数。k = max(2 * *J, *J * (a % *J != 0) + a / *J * *J) 的含义是:决定区间内开始标记合数的起点。如果 a 不能被正在试除的质数 *J 整除,那么起点是 *J × a / *J × *J。如果 a 能够被正在试除的质数 *J 整除,那么如果直接 *J + a / *J * *J,标记就会从 *J 的 (a + 1) 倍开始,而漏掉 a 倍 *J,所以在 a % *J = 0 的时候要补上 a 本身的标记。
不过如果仅仅这样处理,可能导致 a < *J 时,*J 本身在区间内从而被标记。质数的 1 倍(本身)是不可以标记的,必须从两倍开始标记,所以限制 k 最少要为 2 × *J。
特判:如果 a ≤ 1,可以发现 1 不会被标记为合数。而 1 本身也不是质数,因此要从总数中扣除。
在这里插入图片描述

三、AC 代码(144 ms)

#include<cstdio>
#include<cmath>
#include<algorithm>
#include<bitset>
#pragma warning(disable:4996)
using namespace std;
//unsigned prime[4792], _PrimeTy, MaxPrime, * prime_end = prime; bitset<46338> notprime; bitset<100001> iscompo;
unsigned prime[8192], _PrimeTy, MaxPrime, * prime_end = prime; bitset<65536> notprime; bitset<131072> iscompo;
inline void gen_prime() {
	decltype(_PrimeTy) n = notprime.size() - 1, m = n / 2, L; notprime[0] = notprime[1] = true;
	for (decltype(_PrimeTy) i = 2; i <= m; ++i) {
		if (!notprime[i]) { *prime_end = i, ++prime_end; }
		L = n / i;
		for (auto j = prime; j != prime_end && *j <= L; ++j) {
			notprime[i * *j] = true; if (i % *j == 0)break;
		}
	}
	for (decltype(_PrimeTy) i = m + 1; i <= n; ++i)
		if (!notprime[i]) { *prime_end = i, ++prime_end; }
	MaxPrime = *(prime_end - 1);
}
unsigned T, a, b, c, t, l;
int main() {
	gen_prime();
	scanf("%u", &T);
	for (unsigned i = 1; i <= T; ++i) {
		scanf("%u%u", &a, &b); c = 0; l = b - a + 1; t = sqrt(b); iscompo.reset();
		for (auto J = prime; *J <= t; ++J) {
			for (auto k = max(2 * *J, *J * (a % *J != 0) + a / *J * *J); k <= b; k += *J) {
				iscompo[k - a] = 1;
			}
		}
		for (unsigned i = 0; i < l; ++i)if (!iscompo[i])++c;
		if (a == 1)--c;
		printf("Case %u: %u\n", i, c);
	}
	return 0;
}
工业相机,大恒,面振相机8脚电源线和I/O触发接口线,颜色和接法说明和触发软件设定 上图: 说明一下,工业相机有TTL逻辑电平触发,也有光耦触发等。 这里一般我们用电路板驱动,就用GPIO触发模式, 这里,准备了两个GPIO触发模式,为LINE2,LINE3都可以选择,然后有一个GPIO_GND 如果,你只有一个触发接口,那么如图,选两个就好了。 实际接法如图。 ... 阅读详情

相关推荐

基于JAVA的GB28181实现之SIP服务核心组件解析

本文深入解析了基于JAVA的GB28181标准中SIP服务的核心组件实现,包括协议栈选择、消息处理引擎、事务管理器等关键技术点。通过实战案例分享海康威视、大华设备的特殊处理技巧,并提供性能优化和常见问题排查指南,帮助开发者高效构建稳定的视频监控系统。

weixin_30892037的博客 264

Help Hanzo 题解

Amakusa, the evil spiritual leader has captured the beautiful princess Nakururu. The reason behind this is he had a little problem with Hanzo Hattori, the best ninja and the love of Nakururu. After he...

weixin_43154720的博客 280

STM32L452与FPGA通信翻车?手把手教你关闭I2C时钟延展避坑(附OVR错误解决方案)

本文深入解析STM32L452与FPGA在I2C通信中因时钟延展功能导致的常见问题,提供关闭I2C时钟延展的详细配置方法(NOSTRETCH模式),并针对可能出现的OVR错误给出Combined模式解决方案。通过实战案例和波形分析,帮助工程师快速排查和解决嵌入式系统中的I2C兼容性问题。

e3f4g5的博客 216

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

Help Hanzo 题意:求a~b间素数个数(1 ≤ a ≤ b < 231, b - a ≤ 100000). (全题在文末) 题解: a~b枚举必定TLE,普通打表MLE,真是头疼。。 b - a ≤ 100000 是关键。 类似素数筛的方法: 1.初始化vis[]=0; 2.素数的倍数vis[]=1; 3.b较小时,素数筛解决 ...

weixin_30241919的博客 181

机械设计师必看:如何用Autodesk Inventor高效完成钣金设计(附实战案例)

本文为机械设计师详细解析了如何利用Autodesk Inventor Professional高效完成钣金设计。文章通过一个钣金防护罩的实战案例,系统介绍了从核心设计逻辑、建模流程、参数化技巧到工程图输出的完整工作流,旨在帮助设计师掌握智能化的设计方法,显著提升从概念到制造的设计效率与准确性。

honey的博客 1182

【数据集处理】DroneVehicle数据集处理方法

DroneVehicle数据集由无人机采集的56,878张图像组成,其中一半是RGB图像,其余为红外图像。作者为这五个类别制作了带有定向边界框的丰富注释。

qq_44102942的博客 5047

light oj 1197 Help Hanzo

Help Hanzo Time Limit:2000MS     Memory Limit:32768KB     64bit IO Format:%lld & %llu Description Amakusa, the evil spiritual leader has captured the beautiful princess Nakururu. The reason be

wings的博客 384

open-mmlab / mmpose安装、使用教程

mmpose安装、使用教程mmpose安装教程1. 安装mmcv-full2. 安装MMPose2. 安装mmdet使用教程1. 预测图片2. 预测视频 mmpose mmpose是商汤旗下有又一款好用的工具箱,主要是针对姿态识别任务开发的,包括人体姿态识别和动物姿态识别。里面继承很多现成的网络可以供大家使用,并且提供了训练好的权重。用户可以更具自己的需求训练自己的数据,或者直接应用他们的结果,反正就是很全面啦!!!! github连接:https://github.com/open-mmlab/mmpos

CharmsLUO的博客 1万+

Help Hanzo(LightOJ - 1197)(欧拉筛 + 思维)

LightOJ - 1197 Help Hanzo 来源:LightOJ - 1197 Help Hanzo 题意: 判断a ~ b区间内,有多少个素数,a,b范围[1, 2 ^ 31 - 1],b - a <= 1e5 思路: 这个题巧妙就巧妙在区间长度上,为1e5,而a,b最大范围为INT_MAX,所以可以先筛出来sqrt(INT_MAX) 以内的素数,约为50000,通过这些素数去标记[a, b]范围内的素数,通过 埃氏筛的方法(O(nloglogn)),将每一个素数增加,每次增加其本身的

ocean__ocean的博客 286

将CityScapes数据集转换为COCO格式的实例分割数据集

##¥##2019年结束前最后两小时,写出本年度最后一篇博客,不是博主没地方去跨年,实在是Coding乐趣无穷ahhhh ##¥## COCO数据集是研究实例分割的通用数据集,但是针对道路环境的数据较少,对于自动驾驶和移动机器人的应用并不适配。而提供道路环境的实例分割数据的数据集目前有KITTI、CityScapes、Apllo等,CityScapes算是应用较广,数据质量较高的一个,所以,本篇...

陆羽飞的博客 9940

《网络安全自学教程》- OSI七层模型分层及作用,数据封装与解封过程,数据传输过程。

OSI分哪七层,每层的作用是什么,解释数据在七层模型中是怎样传输的,封包和解封过程,数据包在每一层是怎么封装和解封的。

wangyuxiang946的博客 1万+

LightOJ1197 - Help Hanzo(区间素数筛 + 模板)

题目链接: https://vjudge.net/problem/LightOJ-1197 题目大意: 给出a,b求[a,b]内素数个数,保证b−a<100000,1≤a≤b<231。 解题过程: 这题有点可惜,没仔细想就去翻书了,挑战第二版 P121,当初这里看过了,以为只有一个埃氏筛法然后跳过了,有点可惜… 题目分析: ...

weixin_38169206的博客 198

Python 爬虫教程:财经新闻实时抓取(最新资讯 + 关键词提取)

在当今信息爆炸的时代,财经新闻的实时获取对于投资者、研究人员以及普通大众来说都具有重要的价值。通过 Python 爬虫技术,我们可以高效地抓取财经新闻,并提取其中的关键信息,以便更好地进行数据分析和决策支持。本文将详细介绍如何使用 Python 编写一个财经新闻实时抓取系统,并结合关键词提取技术,帮助读者快速掌握 Python 爬虫的核心技能。

yansideyucsdn的博客 1049

LightOJ1197 Help Hanzo 区间筛

LightOJ1197 Help Hanzo 标签 区间筛法 前言 我的csdn和博客园是同步的,欢迎来访danzh-博客园~ 简明题意 求区间质数个数(区间长度<=1e6) 思路 区间[l,r]中的和数,质因子一定有一个<=sqrt( r)。因此提前筛出[1,sqrt( r)]中的质数,然后枚举这些质数的倍数就可以了。 注意事项 注意在区间中移动的指针应...

danzh 201

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

LightOJ 1197 - Help Hanzo (区间筛)

LightOJ 1197 - Help Hanzo (区间筛)

weixin_62802134的博客 785

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Help Hanzo(区间求素数) LightOJ - 1197 板子题

Amakusa, the evil spiritual leader has captured the beautiful princess Nakururu. The reason behind this is he had a little problem with Hanzo Hattori, the best ninja and the love of Nakururu. After he

WhyWhatHow-Craze 305

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Help Hanzo 素数打表进阶(大数据区间打表)

题意:求a~b之间的素数;(1 难点:数据太大,素数打表会TLE,枚举会MLE; 解题关键:b-a 方法:素数打表小部分(1e6),然后用已打表素数去拓展所给区间的素数,用v[j-a](a #include #include #include #include using namespace std; typedef long long ll; const int N=1e6+5; int

Big_Rui的博客 729

Help Hanzo LightOJ - 1197

题目链接:https://cn.vjudge.net/problem/LightOJ-1197 Amakusa, the evil spiritual leader has captured the beautiful princess Nakururu. The reason behind this is he had a little problem with Hanzo Hattori, ...

何世全的博客 338

Help Hanzo

Help Hanzo Amakusa, the evil spiritual leader has captured the beautiful princess Nakururu. The reason behind this is he had a little problem with Hanzo Hattori, the best ninja and the love of Nakurur...

rg_lzm的博客 320

Help Hanzo(素数筛)

题意:本题就是求l~u之间有多少个素数; 分析:因为题数很大,所以不能用正常的素数筛法,只能先筛一部分,在用这些素数再筛出l~u之间的素数。本题和另一道题目很相似(传送门); 另一道题题目链接:http://poj.org/problem?id=2689; 由于不是很难,我就不赘述怎么进行素数筛,详情请见博客:http://blog.youkuaiyun.com/qq_27599517/article/

北门的智慧 873

LightOJ-1197 Help Hanzo(区间筛板子题)

Help Hanzo Amakusa, the evil spiritual leader has captured the beautiful princess Nakururu. The reason behind this is he had a little problem with Hanzo Hattori, the best ninja and the love of Nakururu. After hearing the news Hanzo got extremely angry. But

qq_43461168的博客 358

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 ...

deyou1988的专栏 174

介绍几种常见的质数筛选法

质数:除了1和他本身没有其它因数的正整数就是质数。1不是质数,2是质数。

m0_60343477的博客 1878

LightOJ - 1197 Help Hanzo(线性筛+埃氏筛)

题目链接:https://vjudge.net/problem/LightOJ-1197 题意:给两个数a,b,求a,b之间有几个素数。 思路:首先可以用线性筛筛选出1e6范围内的素数,然后如果b<1e6的话,直接扫一边就行记录答案就行;否则,我没可以用已经筛选出来的1e6范围内的素数,用埃氏筛法的思想把a->b范围内的非素数全部标记出来,之后直接扫一遍记录答案就行 AC代码 #inc...

qq_43423395的博客 266

【区间素数筛】 Help Hanzo

题意: 求一段区间内的素数的个数 题解: 当区间边界很小时,可以直接根据埃式筛法先预处理所有素数,然后直接暴力遍历计数即可 但当边界太大时,比如求【100000000 100010000】区间内的素数个数,打表是不能达到这个范围的,所以就需要把区间整体转移到【0,10000】 至于如何转移,可以根据埃式筛的原理,...

ZangWhe 383

lightoj1197Help Hanzo(二次筛)

原题链接:http://lightoj.com/volume_showproblem.php?problem=1197 题目大意:查询一个区间[a,b]内的质数个数,其中1≤a≤b<2311\le a \le b\lt2^{31},但是有a−b≤1e5a-b\le1e5,那么首先我想到用miller-rabin冲一下,结论是数据卡了miller-rabin,反正我冲不过去,那就先打出来一个小范围的

IDrandom的专栏 591
上一篇: 【代码超详解】LightOJ 1213 Fantasy of a Summation(思维 + 快速幂取模,8 ms)
下一篇: 【代码超详解】LightOJ 1138 Trailing Zeroes (III)(思维,5 ms)
山上一缕烟
博客等级 码龄8年 269粉丝 498原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值