首页 > 其他分享 >2023 长郡暑期集训 DAY-2 数学专题笔记

2023 长郡暑期集训 DAY-2 数学专题笔记

时间:2023-07-14 13:13:05浏览次数:43  
标签:筛法 标记 合数 DAY 枚举 2023 times 质数 长郡

2023 长郡暑期集训 DAY-2 数学

质数和约数

质数是指除了 \(1\) 和它本身之外没有其他因数的自然数。

质数判定

判定单个自然数是否为质数,可以使用试除法,在这里不多描述。

bool is_prime(int n){
    if(n < 2) return 0; // 如果n小于2,不是质数,返回0
    for(int i = 2; i <= n / i; i++) // 从2开始逐个尝试除数i,直到i大于n的平方根
        if(n % i == 0) return 0; // 如果i能整除n,说明n不是质数,返回0
    return 1; // 如果没有找到能整除n的除数,说明n是质数,返回1
}

此算法复杂度为 \(O(\sqrt {n})\)

而接下来介绍判断 \([L,R]\) 中质数的筛法。

Eratosthenes筛法 (埃氏筛法)

我们知道一个合数一定可以分解为 \(p \times s (s \neq 1)\) 的形式,其中 \(q\) 是质数,\(s\) 是倍数。

那么我们就可以枚举 \([L,R]\) 中的 \(p\),对于每个 \(p\),枚举 \(s\),标记掉合数 \(p \times s\),剩下的必然是质数,这就是埃氏筛法。

但是我们会发现,如果使用这样的埃氏筛法,有一些数字会被标记多次,如 \(6\),会被 \(2\) 和 \(3\) 标记两次。

所以我们可以做出一个小小的优化:

对于素数 \(p\),只枚举倍数 \(x \geq p\) 的数,因为如果 \(x < p\),则 \(x\) 中一定有比 \(q\) 小的质因子,\(q \times s\) 会在前面筛选过程中被筛出。

还可以发现,在枚举的过程中,每次筛完后剩下的区间内第一个数一定是质数,原因同上。

所以枚举质数时不需要从 \(1\) 枚举到 \(n\),只要考虑到 \([2,\sqrt {n}]\) 中的质数即可。

此算法时间复杂度为 \(O(loglogn)\)

bool p[MAXN]; // 布尔数组,用于标记数字是否为合数
p[0] = p[1] = 1; // 将0和1标记为合数,因为它们不是质数
for(int i = 2; i <= n; i++){
    if(p[i]) continue; // 如果当前数已经被标记为合数,则跳过,因为它不是质数
    for(int j = i; i * j <= n; j++){
        p[i * j] = 1; // 将当前数的倍数(p * s)标记为合数
    }
}
线性筛法

尽管上面的埃氏筛法已经经过优化,减少了重复枚举的次数,可是合数还是会被重复枚举。

而这里的线性筛法,顾名思义,它的时间复杂度是 \(O(n)\) 的。

怎么做到的?

线性筛法每个合数只被它的最小质因数标记,所以每个数最多只会被标记一次。

依次考虑 \(2 - n\)之间的每一个数 \(i\)。

如果 \(i\) 是质数,则将其保存到质数表中。

否则利用 \(i\) 和质数表中的 \(pri_j\) 筛去 \(i \times pri_j\)。

注意,筛的过程中要确保 \(pri_j\) 是 \(i \times pri_j\) 的最小质因子。

bool p[MAXN]; // 布尔数组,用于标记数字是否为合数
p[0] = p[1] = 1; // 特判,将0和1标记
for(int i = 2; i <= n; i++){
    if(!p[i]) pri[++cnt] = i; // 如果当前数字i是质数,则将其加入质数数组pri,并增加计数器cnt
    for(int j = 1; j <= cnt && i * pri[j] <= n; j ++){
        p[i * pri[j]] = 1; // 将当前数字i与质数数组中的质数相乘得到的倍数标记为合数
        if(i % pri[j] == 0) break; // 如果i能被pri[j]整除,则跳出内层循环,避免重复标记
    }
}
练习1:Prime Distance

\(\texttt {Prime Distance}\) \(\text {- 洛谷}\)

简要题面
  • 给定两个整数 \(L,R\), 求 \([L,R]\) 中相邻的两个差最大的质数和相邻的两个差最小的质数。

  • \(1 \le L < R \le 2 ^ {31} - 1,R - L \le 10 ^ 6\)

解题思路

由于数据范围很大,无法生成 \([1,

标签:筛法,标记,合数,DAY,枚举,2023,times,质数,长郡
From: https://www.cnblogs.com/acangcang-Eliauk/p/17553418.html

相关文章

  • 2023.7.14
    学习java中的类面向对象与面向过程面向过程:强调的是功能行为,以函数为最小单位,考虑怎么做。面向对象:强调具备了功能的对象,以类/对象为最小单位类与对象的关系类:对一类事物的描述,是抽象的、概念上的定义对象:是实际存在的该类事物的每个个体,因而也称为实例(instance)面向对象......
  • 成语积累 20230714
    鸢飞戾天:鸢:又名黑耳鸢,一种凶猛的鸟;戾:至,到。比喻为功名利禄而极力高攀,用于形容势利小人。作谓语,定语。出处:鸢飞戾天,鱼跃于渊。(万物各得其所)例句:~者,望峰息心。经纶世务者,窥谷忘返。即鹿无虞:进山打鹿,没有熟悉地形和鹿性的虞官帮助,那是白费力气。形容做事条件不成熟就草率行事,必定劳......
  • java学习day03:循环结构
    我在B站上大学......
  • 第二届先进与新兴材料国际学术会议(AEM2023)
    第二届先进与新兴材料国际会议(AEM2023)将于2023年9月16-17日在中国湖北武汉举行。该会议每年由湖北省众科地质与环境技术服务中心承办,我们诚挚地邀请您将论文全文投稿至EI和SCI期刊。截稿日期:2023年9月1日接受/拒稿通知:投稿后1-2周收录检索:EI/Scopus在线投稿★主讲嘉宾0......
  • 全方位对比 Postgres 和 MySQL (2023 版)
    全方位对比Postgres和MySQL(2023版)原创Bytebase昨天10:36阅读数9.4K本文被收录于专区数据库进入专区参与更多专题讨论 根据 2023年StackOverflow调研,Postgres已经取代MySQL成为最受敬仰和渴望的数据库。随着Postgres的发展势头愈......
  • Day08(2023.07.13)
    行程8:45    到达上海市信息安全测评认证中心(黄浦区陆家浜路1308号)9:00  学习《网络安全等级测评师培训教材》11:30--13:00   吃饭休息13:00 到达久事公交大厦(徐汇区吴中东路南555号)16:30      下班  系统管理软......
  • 2023年度最佳开发工具-Eolink Apikit
    6月30日,「2023掘金技术引力榜」颁奖典礼隆重举行,EolinkApikit荣获「年度最佳开发工具」!开发工具是每个开发者每天都会使用的产品,深度影响着开发者的工作效率和生产力。稀土掘金技术社区汇集了大批优秀的开发者,一起探索和发现产业中最具价值的新技术,找到行业里的引领人物、优秀......
  • 20230718 苏州无人车国赛游寄
    7.14早上4:30起床,5:00打车去机场,5:20左右到机场。弄完机票、安检,突然来短信说飞机时间变了,六点半的飞机改到九点半,在机场一直等着。机场空调有点冷( 8:55发现有人登机了,就跟在队伍后面。9:00准时登机,飞机的颜色蛮漂亮的。......
  • 方芳:2023-2024年上学期《农业概述》学习笔记黑板报(一)
        《农业概述》武汉市江夏路桥工程有限公司中央财经大学 经济管理学院    方   芳    15927602711第一篇自然-社会大系统中的农业第一-章农业的起源与发展农业在人类历史发展中的作用:(--)农业在原始社会的作用1.大大增加了食物的供应,从而......
  • 2023大数据面试总结
    先说些废话作为一个全栈开发工作者,曾经对公司专职的大数据开发有着浓厚的兴趣,所以尝试学习大数据开发所需要的各种技术栈。本文就是我在学习过程中记录下,所遇到的一些大数据面试的提问,仅供参考。当然,因为时间精力有限,并非所有的问题我都去记录了答案,如果您不了解某些问题或者不......