我已经是一只废桔了(素数筛选+二分查找)

素数的判断与筛选 这个筛选方式不是特别快,不是线性时间,因为对于一个相同的数,比如18,会被2筛选出,也会被3筛选出,即对于一个数会被重复的判断是否为素数,那么如果我们可以让一个数只通过一次判断就可以知道是素数,那么就变成线性时间了,即O(n)的时间复杂度。主要思想就是保证每个合数只被筛选一次,如12,会被2,3,4,6,等都会筛选到,如果j等于i*i的话会被2,3重复筛到,所以这里用欧拉筛来改进这个方法。它的原理就是维护一个素数表,当遇到数i时,先判断是不是素数,是的话,加到素数表,然后让i。 阅读详情

题目链接:

估计很快重现赛就消失了,而且题目也找不到。
暂时链接(需登录)


题目大意:

输入一个数N,求大于大于N的第一个素数。(N<5000000)


解题过程:

  • 比赛的时候,一看到这个的题,妥妥的要超时,然后打开了status一看,果然……于是直接放弃。
  • 倒是想强行双重for把五百万内的素数打印出来存到文件里,然后复制到程序里开数组存起来,然后跑了20多分钟还没完,于是放弃了。
  • 后来听题解时说是要素数筛选,然后突然想起来之前好像看到过,只跑一遍就可以把素数表打印出来。
  • 然后二分查找也不是很熟练,于是专门去刷了几个题练了下手:

题目分析:

  • 素数筛选打表。
  • 二分查找,找出一个大于等于N的素数,并且这个素数的前一个素数小于N,如果这个素数是2的话就不用判断了。
  • -

AC代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<vector>
using namespace std;

const int MAX = 5123456;
int data[MAX], tail;
int book[MAX];

void init()
{
    for (int i = 2; i < MAX; i++)
    {
        if (!book[i])
            data[tail++] = i;
        else
            continue;

        int cnt = i;

        for (int j = 1; cnt*j < MAX; j++)
            book[cnt*j] = 1;
    }
}

int main()
{
    init();
    int n;
    while (~scanf("%d", &n))
    {
        int l = 0, r = tail, cur;
        while (true)
        {
            cur = (r + l)/2;
            if (data[cur] >= n && (cur == 0 || data[cur-1] < n))
                break;

            if (data[cur] > n)
                r = cur;
            else if (data[cur] < n)
                l = cur;
        }
        printf("%d %d\n", cur+1, data[cur]);
    }
}
筛选法构造素数表 1、素数的定义 指在一个大于1的自然数中,除了1和此整数自身外,不能被其他自然数(不包括0)整除的数。 2、判断一个数是否为素数的朴素算法 根据素数的定义,我们很容易想到的一种判断方法就是:对于大于1的正整数n,从2开始到n-1依次判断是不是n的因子,如果存在一个数是n的因子,那么n就不是素数,否则就是素数。很显然这样的算法,时间效率为O(n) 3、稍做优化后的算法 阅读详情

相关推荐

WRF-Chem新手避坑指南:从chem_opt到emiss_opt,那些手册里没明说的参数配置实战

本文为WRF-Chem新手提供从chem_opt到emiss_opt的参数配置实战指南,解析官方文档中未明确的常见陷阱与解决方案。通过华北重霾案例,详细讲解化学机制选择、排放源配置及特殊参数组合的注意事项,帮助用户避开常见错误,提升模拟效率。

weixin_30897079的博客 279

基于部分卷积的AI图像修复:从像素填充到语义生成的技术突破

图像修复是计算机视觉领域的一项基础任务,旨在从图像缺失或不完整的区域中恢复出合理的视觉内容。其核心原理从早期的纹理扩散和基于样本的填充,发展到如今基于深度学习的语义理解与生成。传统方法主要依赖局部像素的相似性进行复制粘贴,缺乏对图像整体语义的把握,导致在复杂结构(如人脸、物体边缘)修复时效果不佳。技术的核心价值在于实现了从“填充”到“生成”的范式转变,使AI能够理解图像上下文,并基于视觉常识创造合理内容。这极大地提升了修复结果的真实感和语义连贯性。应用场景广泛,从老照片修复、影视特效中的物体移除,到医疗影像

weixin_38166557的博客 700

汇编语言与接口技术(第4版)清华大学出版社 第2章 80*86微处理器 课后题答案

汇编语言与接口技术(第4版)清华大学出版社 第2章 80*86微处理器 课后题答案

m0_51658788的博客 3606

我已经是一只废桔了

Problem Description 在古老而神秘的 409 实验室,住着一位史诗级长者,世人称之为「金桔」。 金桔能歌善舞,能说会道,能写伸展树,会敲自动机,口算微积分,心算大反演,区域赛虐遍全场,傲得了娇卖得了萌,实乃 ACM 界之集大成长者。 最近,临近退役的金桔自觉体弱多衰,身子骨一日不如一日,常常自言自语道:“唉,我已经是一只废桔了...”。现在,他连基本的查找大于等于 n

xiaoxinxinev5的博客 355

从零开始训练一个简单的CLIP

到这里,你已经基本了解了CLIP的基本原理,并且能够自己动手训练一个简单的CLIP模型。整体上来看,代码比较简单,但是已经基本覆盖到CLIP的整体训练流程了。另外,如果需要实际的落地,建议还是使用openclip等更加成熟的框架。欢迎关注github:https://github.com/taishan1994。

u012374012的专栏 2911

OpenClaw:深度学习驱动的智能编程工具实战解析

智能编程工具通过深度学习技术革新传统开发流程,其核心在于代码语义理解与实时协作能力。这类工具采用AI代码补全、错误预测等技术,显著降低开发者认知负荷,尤其适用于复杂业务逻辑开发和遗留系统维护场景。以OpenClaw为例,其智能填充和上下文感知功能可提升40%编码效率,减少65%调试时间。关键技术实现包含自然语言处理、代码静态分析等,在金融科技、电商系统等领域具有广泛应用前景。热词提示:代码理解引擎、智能工作流整合展现了当前AI辅助开发的最新趋势。

chubaisheng8627的博客 320

二分查找素数

定义一个 prime() 函数求整数 n 以内(不包括n)的所有素数(1不是素数),并返回一个按照升序排列的素数列表。使用递归来实现一个二分查找算法函数bi_search(),该函数实现检索任意一个整数在 prime() 函数生成的素数列表中位置(索引)的功能,并返回该位置的索引值,若该数不存在则返回 -1。 输入格式: 第一行为正整数 n 接下来若干行为待查找的数字,每行输入一个数字输出格式

1041

手把手教你用MaxEnt+ArcGIS玩转物种分布预测

本文详细介绍了如何利用MaxEnt最大熵模型与ArcGIS软件进行物种分布预测。通过实战案例,从数据收集、环境变量处理、模型参数设置到结果可视化分析,手把手教你掌握生态位模型的核心流程。结合SDM toolbox插件,可高效完成数据预处理与高级空间分析,是生态学与保护生物学研究的实用指南。

weixin_29309475的博客 559

20190315 @一只该努力的废柴

这里是一名大三狗,不知不觉已经大学的尾声了,周围同学都在考研,思索再三,还是不想考研,孤军奋战自己恐怕坚持不下去,再认真想一想找工作也没什么拿得出手的技能,所以现在就是迫切的想学点东西,然后出来找工作,要不然就名副其实废柴狗了。主要就是要有能力自己养活自己,还有六个月,时间算比较紧迫吧,想学好也没什么捷径可走,只有狂敲代码,才能真的算会用学的知识,敲到开始脱发那一天我就真的算的上一点专业了吧。目前...

qq_44779084的博客 220

QCC308x/3095收发一体:TX/RX双模一拖二与多编码广播实战解析

本文深度解析高通QCC308x/3095蓝牙音频芯片的TX/RX双模功能与广播应用。芯片支持发射和接收模式下的“一拖二”连接,并能实现LE Audio多设备广播,显著提升多设备音频切换体验与商业广播能力,适用于健身、导览等丰富场景。

g9h0i1的博客 1003

【GlobalMapper精品教程】072:GlobalmapperV25中文版下载地址及安装教程

GlobalmapperV25中文版下载地址及安装教程安装包位于专栏完整数据包中,请订阅后从优快云私信查收!最新GlobalMapper中文版入门实战实验教程,图文并茂,实用性强,内容包括:GM基础操作、数据处理及地形图制作、航测内业数据处理、点云处理、地形分析、空间分析、数据库建库入库等。配套完整案例数据,持续同步更新!订阅专栏后,从私信查收中文安装包永久版(中文23.0+24.0)及配套实验数据包。

智慧空间实验室 4733

哈哈

C~K的魔法石Time Limit: 1000 ms Memory Limit: 65536 KiBSubmit StatisticProblem Description传说 C~K 有三种神奇的魔法石:第一种魔法石叫做人铁石,拥有 A 的能量;第二种魔法石叫做地冈石,拥有 B 的能量;而第三种,则是最神奇的天玄石,拥有无可比拟的 C 的能量! 但是有一天,小豪宝宝 (UMR) 太调皮了,把一颗天...

BePosit的博客 277

Labview邪修01:贪吃蛇小游戏

摘要:博主使用LabVIEW 2020(32位)复刻了经典贪吃蛇游戏。程序具备随机生成蛇(初始长度3)和食物、三档速度调节、键盘方向控制等功能,碰撞边界或自身即游戏结束。实现过程包括:1)界面设计,使用二维颜色盒数组构建游戏区,添加速度枚举控件和功能按钮;2)程序架构,采用模块化设计包含Main.vi、Start.vi等6个核心VI,分别处理初始化、位置计算、碰撞检测等逻辑;3)事件驱动机制,通过开始/结束事件、按键响应和超时循环实现游戏流程控制。运行时可实时显示分数,完整还原了贪吃蛇的核心玩法。

weixin_38637405的博客 970

几种常见的素数筛选法

多种素数筛选的方法

心雨 2083

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

经典算法——筛选法求素数(素数筛选)

[数值问题]素数筛选 内存限制:128 MB时间限制:1.000 S 题目描述 输入一正整数n(2<=n<=5*10^6),按顺序输出2到n范围内的所有素数。 输入 输入共一行一个数,表示n的值。 输出 输出若干行,每行5个素数,用空格隔开。 样例输入 20 样例输出 2 3 5 7 11 13 17 19 素数在很多应用领域有很重要的用途,寻找一个高效的算法十分重要。例如,找出10000以内的素数可能仅仅是为某个程序做的准备工作,为提高程序的效率,希望在尽可能短的时

捉只树袋熊的博客 7946

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

筛选素数:埃氏筛选、欧拉筛选(线性筛选)、区间筛选

素数的埃氏筛选、欧拉筛选、区间筛选一、知识储备二、朴素筛选三、埃氏筛选四、欧拉筛(线性筛)五、区间筛六、完整的测试代码: 一、知识储备 基本的素数知识 素数除了1和它本身以外没有别的因数 任何一个大于1的自然数 N,如果N不为质数,那么N可以唯一分解成有限个质数的乘积 一个数c=a*b,那么要么a=b,要么a和b一个大于根号c,一个小于根号c 二、朴素筛选 先讲一下最基本的朴素筛选 判断n是不...

指弹键盘哼民谣 2770

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Python素数筛选法

原理:   素数,指在一个大于1的自然数中,除了1和此整数自身外,不能被其他自然数整除的数。在加密应用中起重要的位置,比如广为人知的RSA算法中,就是基于大整数的因式分解难题,寻找两个超大的素数然后相乘作为密钥的。一个比较常见的求素数的办法是埃拉托斯特尼筛法(the Sieve of Eratosthenes) ,说简单一点就是画表格,然后删表格,如图所示:   从2开始依次往后面数,

魔神翼 1万+

用python筛选素数

首先我们要明白什么是素数? 只能被1和自身整除的数 第一种 我认为这是最简单的,规避了a**0.5的思考 a=int(input("请输入一个自然数:")) lst=[] forlinrange(2,a+1): #print(l)#2,3,4,5,6,7,8,9 #a=int(l**0.5) whilel<9: ifl%2==0: #print(l,"不是素数") break else:...

m0_59882269的博客 4021

筛选法求素数———C语言

筛选法是一种求出一定范围内素数的方法,顾名思义,人们在纸上写下一串自然数,通过筛选法的操作将不是素数的数从纸上撕下来,留下一个个小孔。最后,纸张像筛子一样,得名筛选法。

萌新xiaoxu的博客 5538

线性筛选法求素数

普通求法: #include<stdio.h> int main() { int i, n; while (scanf("%d", &n) == 1) { for (i = 2;i < n;i++) if (n % i == 0) break; if ...

qq_43430261的博客 1030

素数查找 && 二分查找

素数查找 && 二分查找 背景 今天在刷洛谷的题的时候,遇到了 质数口袋 这道题,作为刷题人的第一直觉肯定就是去想对应的算法(狭义的算法),但是我并没有想到什么合适的算法,看了一下旁栏的算法标签,竟然空空如也。然后我就开始了正常解题(暴力枚举 和 模拟) 判断素数(一般思路) 废话不多说,先上代码 (注:本人不是很喜欢 C/C++ 里面的 Bool 类型) int isprime(int n) { if (n <= 1) { //对 1 和 2 这种情况进行单

cook_for_you的博客 346

python用筛选法求解小于n的所有素数_用筛选法求解n以内的所有素数

用筛选法求解n以内的所有素数:筛选法的思想是一个数是素数则这个数的所有的倍数都是合数,我们不去找素数而去找合数,剩下的就是素数了。一个合数其最大的质因子不会超过其开发数,所以只要迭代到其最大数的开方数即可 一个简单的筛素数的过程:n=30。1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30...

weixin_36215736的博客 7100

算法:素数筛选

#include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; int main(void) { //这个是输出1000以内的素数 //如果是素数,prime[]=0; int prime[1000]; int i=0,j=0; //这个是初始化 for (i = 0; i &lt; 1000; ++i) ...

wujing1_1的博客 10万+

求素数之筛选法

筛选法可谓是最容易理解的一种寻找素数的方法了首先举个栗子来解释什么叫做筛选法,了解了解筛选法的思路:我要寻找从1到15里的素数  (红色代表被筛选掉,不是素数)第1步:1是素数我不用管,不需要筛选掉1的倍数1   2   3   4   5   6   7   8   9  10   11   12   13   14   15第2步:2没有被前面的筛选掉,所以2是素数,然后筛选掉2的倍数 4 6...

4559的博客 2257

筛选法求素数

筛选法求素数要比普通的求素数方法更加快速,虽然在一些小范围内看不出多大差别,但是当范围大到一定程度,普通求素数的方法就会显得比较耗时,在做一些编程题的时候特别容易超时 我们就拿1000以内的素数来说 普通的方法(可能和我的不一样,但是都是按照定义来的,意思差不多) #include<iostream> using namespace std; int main() { int a[2...

记录博主学到的点滴 1486

用简单素数筛选法求N以内的素数。

题目描述 用简单素数筛选法求N以内的素数。 输入 N 输出 2~N的素数 样例输入 100 样例输出 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 #include<stdio.h> int main() { int n, i, m; int isPrime=1; //设置一个标志来确定是否是素数 scanf("%d", &n); for(m=2; m<=n; m++){

Lau的博客 4464
上一篇: UVA10129-Play on Words(欧拉道路)
下一篇: SDUT Problem_5 二哥的狗(水题)
ACM_Fish
博客等级 码龄10年 69粉丝 76原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值