首页 > 其他分享 >AcWing 196 质数距离(素数,筛法)

AcWing 196 质数距离(素数,筛法)

时间:2024-12-03 17:12:02浏览次数:4  
标签:筛法 int 质数 196 long sqrt 合数 AcWing

问题:给定L,R,找出[L,R]中距离最近和最远的质数对。

分析:注意到L,R的范围很大,到了int极限值,问题毫无疑问是筛质数,不能用普通的筛法筛出[1,R](复杂度)。

埃氏筛法本质是倍数标记合数,注意到如果x是合数,那它一定有不大于sqrt(x)的因数y,那么x就可以被y倍数标记。

步骤:

1.埃氏筛找出[1,sqrt(R)]中的质数。(初始化)

2.用这些质数将[L,R]中的合数进行倍数标记。

3.找出[L,R]中的质数更新答案。

注意细节:

1.枚举倍数j要大等于2,即不能把质数i本身标记了。

2.不开longlong见祖宗(接近int极限就开longlong)。

3.特判(1和0既不是质数也不是合数)。

#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N = 1e6 + 10;
int L, R, tot, a[N], cnt, b[N];
bool v[N];
signed main() {
    for (int i = 2; i <= 1e6; i ++) {
        if (v[i]) continue;
        a[++ tot] = i;
        for (int j = 2; j * i < 1e6; j ++) v[i * j] = 1;
    }
    while (cin >> L >> R) {
        memset(v, 0, sizeof(v));
        memset(b, 0, sizeof(b)); cnt = 0;
        for (int i = 1; i <= tot; i ++) {
            if (a[i] > sqrt(R)) break;
            int j = (L % a[i] != 0) ? L / a[i] + 1 : L / a[i];//向上取整 
            j = max(j, (long long)2);
            for (j; a[i] * j <= R; j ++) v[a[i] * j - L] = 1; 
        }
        for (int i = L; i <= R; i ++) { 
            if (v[i - L] || i == 1) continue;//特判1 
            b[++ cnt] = i;
        }
        if (cnt < 2) {
            printf("There are no adjacent primes.\n");
            continue;
        }
        int mx = 0, mn = N;
        int X1, X2, Y1, Y2;
        for (int i = 2; i <= cnt; i ++) {
            int res = b[i] - b[i - 1];
            if (res < mn) {
                mn = res;
                X1 = b[i - 1], X2 = b[i];
            }
            if (res > mx) {
                mx = res;
                Y1 = b[i - 1], Y2 = b[i];
            }
        }
        printf("%d,%d are closest, %d,%d are most distant.\n", X1, X2, Y1, Y2);
    }
    return 0;
}

 

标签:筛法,int,质数,196,long,sqrt,合数,AcWing
From: https://www.cnblogs.com/love-lzt/p/18584536

相关文章

  • 题解:CF1968G2 Division + LCP (hard version)
    https://www.luogu.com.cn/problem/CF1968G2CF1968G2Division+LCP(hardversion)题解前言这题可以\(O(n\sqrt{n}\logn)\)再各种优化做,算法是二分、哈希(不知道包不包含根号分治,但是有用到根号分治的思想)。如果读题解有些抽象的话可以看代码辅助理解。题意转化由于......
  • ssm玉林师范学院宿舍管理系统-计算机设计毕业源码19633
    玉林师范学院宿舍管理系统设计与实现摘要随着大学生人数的增加,宿舍管理成为高校管理中的重要问题。本论文旨在研究玉林师范学院宿舍管理系统,探讨其优势和不足,并提出改进建议。通过对相关文献的综述和实地调研,我们发现该系统在宿舍分配、卫生评分、失物招领、设施维护等方面......
  • 2024-11-30:质数的最大距离。用go语言,给定一个整数数组 nums,请找出两个(可以是相同的)质
    2024-11-30:质数的最大距离。用go语言,给定一个整数数组nums,请找出两个(可以是相同的)质数在该数组中的下标之间的最大距离。提示:nums的长度在[1,3*10^5]之间。nums的每个元素的值在[1,100]。输入保证nums中至少有一个质数。输入:nums=[4,2,9,5,3]。输出:3。解释:nums[1]......
  • P1217 [USACO1.5] 回文质数 Prime Palindromes
    标题:P1217[USACO1.5]回文质数PrimePalindromes链接:https://www.luogu.com.cn/problem/P1217思路:1.暴力枚举,超时2.回文和质数共同判断,超时3.数字通过strings=to_string(n);转化为字符串,超时+:字符串转为数字intx=stoi(n);4.找规律,有偶数位的回文数(除了11)必然不是质数......
  • P1196 [NOI2002] 银河英雄传说
    题目背景公园5801年,地球居民迁至金牛座阿尔法的第二行星,在那里发表银河联邦创立誓言,童年改为宇宙历元年,并开始向银河系深处拓展宇宙历799年,银河系的两大军事集团在巴米利恩星域爆发战争。泰山压顶集团派宇宙舰队司令莱因哈特率领十万余艘战舰出征,气吞山河集团点名将杨威利组织麾......
  • CSP/信奥赛C++语法基础刷题训练(23):洛谷P1217:[USACO1.5] 回文质数 Prime Palindromes
    CSP/信奥赛C++语法基础刷题训练(23):洛谷P1217:[USACO1.5]回文质数PrimePalindromes题目描述因为151151151既是一个质数又是一个回文数(从左到右和从右到左是看一样的),......
  • acwing第三章算法模板
    29、树与图的存储树是一种特殊的图,与图的存储方式相同。对于无向图中的边ab,存储两条有向边a->b,b->a。因此我们可以只考虑有向图的存储。(1)邻接矩阵:g[a][b]存储边a->b(2)邻接表://对于每个点k,开一个单链表,存储k所有可以走到的点。h[k]存储这个单链表的头结点int......
  • UCB CS194/294-196 (LLM Agents) Lecture 4 (2024.10.1)
    预备知识英文缩写&术语英语简中补充LargeLanguageModel(LLM)大语言模型ArtificialGeneralIntelligence(AGI)通用人工智能一个远大的目标Agent智能体/代理Embody具身Multi-AgentSystem(MAS)多智能体系统Token文本分割后得到的最小语义单位Prompt提示词我们向AI提出的......
  • 最新毕设-Python-旅游数据分析与可视化系统-48196(免费领项目)可做计算机毕业设计JAVA、
    基于python的旅游数据分析与可视化系统的设计与实现摘 要本文旨在设计和实现一个基于Python的旅游数据分析可视化系统。该系统以旅游数据为研究对象,利用Python的数据处理能力和可视化技术,对旅游数据进行深入分析,并通过直观的可视化图表展示分析结果。本文首先介绍了旅游数......
  • [数据集][目标检测]车辆类型检测数据集VOC+YOLO格式8144张196类别
    数据集格式:PascalVOC格式+YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件)图片数量(jpg文件个数):8144标注数量(xml文件个数):8144标注数量(txt文件个数):8144标注类别数:196标注类别名称:[“AMGeneralHummerSUV2000”,“Acura......