首页 > 其他分享 >浅析数论--埃氏筛/欧拉筛/杜教筛

浅析数论--埃氏筛/欧拉筛/杜教筛

时间:2023-03-27 12:14:21浏览次数:60  
标签:埃氏 质数 最小 杜教 因子 枚举 primes i% 浅析

\(\mathcal{0x01 绪论}\)

\(\mathcal{质数的判定试除法 or 六倍原理}\)

一个合数的约数总是成对出现的,如果\(d|n\)(\(d\)能被\(n\)整除),那么\((n/d)|n\),因此我们判断一个数是否为质数的时候,
只需要判断较小的那一个数能否整除n就行了,即只需枚举\(d<=(n/d)\),即\(d<=n\),\(d<=sqrt(n)\)就行了。

为何不用\(sqrt()\)?请自行百度“\(sqrt()\)的运算方式”。你就会知道他是一个很慢的函数。

(1)试除法判断素数

bool is_prime(int x)
{
    if (x < 2) return false;
    for (int i = 2; i <= x / i; i ++ )//核心代码
        if (x % i == 0)
            return false;
    return true;
}

(2)试除法分解质因数(唯一分解定理

void divide(int x)
{
    for (int i = 2; i <= x / i; i ++ )
        if (x % i == 0)
        {
            int s = 0;
            while (x % i == 0) x /= i, s ++ ;
            cout << i << ' ' << s << endl;
        }
    if (x > 1) cout << x << ' ' << 1 << endl;
    cout << endl;
}

(3)一个合数分解而成的质因数最多只包含一个大于\(sqrt(n)\)的质因数。

反证法,若\(n\)可以被分解成两个大于\(sqrt(n)\)的质因数,则这两个质因数相乘的结果大于\(n\),与事实矛盾

(4)当枚举到某一个数\(i\)的时候,\(n\)的因子里面已经不包含\(2-i-1\)里面的数,

如果\(n%i==0\),则\(i\)的因子里面也已经不包含\(2-i-1\)里面的数,因此每次枚举的数都是质数.

(5)算数基本定理(唯一分解定理):任何一个大于1的自然数\(N\),如果\(N\)不为质数,那么\(N\)可以唯一分解成有限个质数的乘积

\(N=P1a1P2a2P3a3......Pnan\),这里\(P1<P2<P3......<Pn\)均为质数,其中指数\(ai\)是正整数。
这样的分解称为 \(N\) 的标准分解式。最早证明是由欧几里得给出的,由陈述证明。
此定理可推广至更一般的交换代数和代数数论。

(6)质因子(或质因数)在数论里是指能整除给定正整数的质数。根据算术基本定理,不考虑排列顺序的情况下,

每个正整数都能够以唯一的方式表示成它的质因数的乘积。

(7)两个没有共同质因子的正整数称为互质。因为\(1\)没有质因子,\(1\)与任何正整数(包括\(1\)本身)都是互质。

(8)只有一个质因子的正整数为质数。

\(\mathcal{筛质数}\)

\(\mathcal{朴素筛法}\)

(1)做法:把\(2~(n-1)\)中的所有的数的倍数都标记上,最后没有被标记的数就是质数.
(2)原理:假定有一个数\(p\)未被\(2~(p-1)\)中的数标记过,那么说明,不存在\(2~(p-1)\)中的任何一个数的倍数是\(p\),也就是说\(p\)不是\(2~(p-1)\)中的任何数的倍数,也就是说\(2~(p-1)\)中不存在p的约数,因此,根据质数的定义可知:p是质数
(3)调和级数:当\(n\)趋近于正无穷的时候,\(1/2+1/3+1/4+1/5+…+1/n=lnn+c\).(\(c\)是欧阳常数,约等于\(0.577\)左右.).
(4)底数越大,\(log\)数越小
(5)时间复杂度:约为\(O(nlogn)\);(注:此处的\(log\)数特指以2为底的\(log\)数).

\(\mathcal{埃氏筛(稍加优化版的筛法)}\)

(1)质数定理:\(1~n\)中有\(n/lnn\)个质数.
(2)原理:在朴素筛法的过程中只用质数项去筛.
(3)时间复杂度:粗略估计:\(O(n)\).实际:\(O(nlog(logn))\).
(4)\(1~n\)中,只计算质数项的话,\("1/2+1/3+1/4+1/5+…+1/n"\)的大小约为\(log(logn)\).

\(\mathcal{线性筛}\)

(1)若\(n\)在\(10\)的\(6\)次方的话,线性筛和埃氏筛的时间效率差不多,若\(n\)在\(10\)的\(7\)次方的话,线性筛会比埃氏筛快了大概一倍.
(2)思考:一:线性筛法为什么是线性的?
二:线性筛法的原理是什么?
(3)核心:\(1~n\)内的合数\(p\)只会被其最小质因子筛掉.
(4)原理:\(1~n\)之内的任何一个合数一定会被筛掉,而且筛的时候只用最小质因子来筛,
然后每一个数都只有一个最小质因子,因此每个数都只会被筛一次,因此线性筛法是线性的.
(5)枚举到\(i\)的最小质因子的时候就会停下来,即if(i%primes[j]==0) break;
(6)因为从小到大枚举的所有质数,所以当i%primes[j]!=0时,primes[j]一定小于\(i\)的最小质因子,
primes[j]一定是primes[j]*i的最小质因子.
(7)因为是从小到大枚举的所有质数,所以当i%primes[j]==0时,primes[j]一定是\(i\)的最小质因子,
primes[j]又是primes[j]的最小质因子,因此primes[j]i*primes[j]的最小质因子.
(8)关于\(for\)循环的解释:
注:首先要把握住一个重点:我们枚举的时候是从小到大枚举的所有质数
1.当i%primes[j]==0时,因为是从小到大枚举的所有质数,所以primes[j]就是i的最小质因子,而primes[j]又是其本身
primes[j]的最小质因子,因此当i%primes[j]==0时,primes[j]primes[j]i的最小质因子.
2.当i%primes[j]!=0时,因为是从小到大枚举的所有质数,且此时并没有出现过有质数满足i%primes[j]==0,
因此此时的primes[j]一定小于i的最小质因子,而primes[j]又是其本身primes[j]的最小质因子,
所以当i%primes[j]!=0时,primes[j]也是primes[j]i的最小质因子.
3.综合1,2得知,在内层\(for\)循环里面无论何时,primes[j]都是primes[j]i的最小质因子,因此st[primes[j]i]=true
语句就是用primes[j]i这个数的最小质因子来筛掉这个数.

标签:埃氏,质数,最小,杜教,因子,枚举,primes,i%,浅析
From: https://www.cnblogs.com/mathic/p/16944808.html

相关文章

  • Vue进阶(二十八):浅析 Vue 中 computed 与 method 区别
    一、前言computed区别于method的两个点:computed是属性调用,而methods是函数调用;computed带有缓存功能,而methods不是;下面看一个具体例子:<!--HTML部分--><divid="ap......
  • 浅析Nginx文件解析漏洞
    浅析Nginx文件解析漏洞本文章将从五个维度对Nginx文件解析漏洞进行剖析——原理、危害、检测、防御、复现1、原理​ Nginx文件解析漏洞的产生原因是由于Nginx配置文件de......
  • Handler消息传递机制浅析
    本节给大家讲解的是Activity中UI组件中的信息传递Handler,相信很多朋友都知道,Android为了线程安全,并不允许我们在UI线程外操作UI;很多时候我们做界面刷新都需要通过Handler来......
  • 【转】浅析审核流
    导语在我们的日常工作中有很多业务场景都会涉及到审批,例如报销、请假、加班、采购、离职等等,既然有这么多业务都会涉及到审批,那么我们把审核做成一个公共服务给各个业务方......
  • 浅析深拷贝和浅拷贝
    浅析深拷贝和浅拷贝深拷贝和浅拷贝是面试中经常会被问到的问题,手写深拷贝也是前端手撕题的热点。那么,为什么面试官们都热衷于让大家手写深拷贝呢?当然不只是看你默写代码,这......
  • Apache Kafka JNDI注入(CVE-2023-25194)漏洞复现浅析
    关于ApacheKafka是一个开源的分布式事件流平台,被数千家公司用于高性能数据管道、流分析、数据集成和任务关键型应用程序。影响版本2.4.0<=Apachekafka<=3.2.2环境......
  • 浅析Facebook的盈利模式(转)
    作为全球最大的社交网站,Facebook仍在以惊人的步伐向前迈进。在很多人看来,这样的一个网站要赚钱一定很容易,估计光靠卖卖广告就能赚很多吧。是的,没错,广告肯定是Facebook的一......
  • KCP协议浅析
    概述KCP协议结合了TCP和UDP协议的特点,是一个快速可靠的协议。引述官方介绍:KCP是一个快速可靠协议,能以比TCP浪费10%-20%的带宽的代价,换取平均延迟降低30%-40%,且最大延......
  • [CVPR2020] RandLA-Net: Efficient Semantic Segmentation of Large-Scale Point Clou
    大佬的TensorFlow代码:here另一个大佬的Pytorch代码:等我看完代码再贴链接,之前那个不太行keywords高分辨率点云——约\(10^5\)点云语义分割多层次特征在正式开始......
  • TCP协议得物联网安全浅析
    公司做物联网项目,后端采用java+netty开发,端口如果直接暴露使之容易被扫描攻击。故实现自定义TCP头,这样可以在握手阶段就丢弃数据包,达到提高攻击门槛的目的。 在......