【基础向】mx 不会数论 /kel
注:本文按 MX 主观顺序排列
基础
()
快速幂
int qp(int a,int b){
long long ans=1,base=a;
while(b>0){
if(b&1)(ans*=base)%=p;
(base*=base)%=p;
b>>=1;
}
return ans%p;
}
质数
单质数判断
试除法
找 \(2\) ~ \(\sqrt{n}\) 之间有没有可以被 \(n\) 整除的,暴力枚举。
tips:从小到大枚举,不然会 TLE。
多质数判断
埃氏筛
for(int i=2;i<=n;i++){
if(pri[i])continue;
res[++cnt]=i;
for(int j=2;i*j<=n;j++)pri[j*i]=1;
}
时间复杂度为 \(O(n \log^2n)\)。
优化: \(j=2\) 改成 \(j=i\),因为那些小于 \(i\) 的倍数枚举,都一定在 \(i\) 之前被遍历过。
欧拉筛
for(int i=2;i<=n;i++){
if(!pr[i])prs[++cnt]=i;
for(int j=1;j<=cnt&&i*prs[j]<=n;j++){
pr[i*prs[j]]=1;
if(i% prs[j]==0)break;
}
}
原理:保证了每一个合数只被其最小的质因子遍历,所以时间复杂度为 \(O(n)\)。
证明(by 乐宝/qq):
因为当我们发现了 \(i=k\times pri[j]\) 时,我们在用 \(i\) 和 \(pri[j+1]\) 遍历区间时会重复。
因为 \(i=k\times pri[j]\),所以 \(i\times pri[j+1]=k\times pri[j]\times pri[j+1]\) 因为 \(pri\) 数组中的素数是单调递增的,所以这样会使得在后面遍历的时候 \(pri[j+1]\times i\) 被重复遍历。
线性筛
for(int i=2;i<=n;i++){
if(!v[i]){
pri[++cnt]=i;
v[i]=i;
}
for(int j=1;j<=cnt&&i*pri[j]<=n;j++){
if(pri[j]>v[i])break;
v[i*pri[j]]=pri[j];
}
}
本质:从大到小累计质因子。
每个合数 \(i\times p\) 只会被它的最小质因子 \(p\) 筛一次,所以时间复杂度为 \(O(n)\)。
算术基本定理
任何一个大于 \(1\) 的正整数都能唯一的分解为有限个质数的乘积,即 \(N=p_1^{c_1}p_2^{c_2}...p_m^{c_m}\)
其中。\(c_i\) 都是正整数,\(p_i\) 都是质数。
试除法
注意最后要有 if(n>1)p[++cnt]=n,c[cnt]=1;
【基础向】mx 不会数论 /kel的更多相关文章
- 莫比乌斯反演&各种筛法
不学莫反,不学狄卷,就不能叫学过数论 事实上大概也不是没学过吧,其实上赛季头一个月我就在学这东西,然鹅当时感觉没学透,连杜教筛复杂度都不会证明,所以现在只好重新来学一遍了(/wq 真·实现了水平的负增 ...
- JSOI2020备考知识点复习
我太菜了qaq,我好爱咕咕咕啊 在NOIP2018爆炸后,我只能指望着在JSOI2019JSOI2020上咸鱼翻身(flag*1) 所以,我要开始复习学习(flag*2) 此博客文会不定时更新qaq( ...
- SDWC补题计划
2018的寒假去了SD的冬令营,因为一班二班难度悬殊,对我很不友好,几乎什么也没学会,但是我把两个班的课件都存了下来,现在慢慢把两个班的例题以及课后题都补一补(毕竟冬令营的钱不能白花). 这些题目横跨 ...
- 算法学习笔记(17): 快速傅里叶变换(FFT)
快速傅里叶变换(FFT) 有趣啊,都已经到NOI的难度了,救命 首先,我们先讲述一下前置知识.已经明白的读者请移步后文 虚数 定义:\(z = a + bi\),其中 \(a, b \in R\ \ ...
- RSA算法原理——(2)RSA简介及基础数论知识
上期为大家介绍了目前常见加密算法,相信阅读过的同学们对目前的加密算法也算是有了一个大概的了解.如果你对这些解密算法概念及特点还不是很清晰的话,昌昌非常推荐大家可以看看HTTPS的加密通信原理,因为HT ...
- 数论算法 剩余系相关 学习笔记 (基础回顾,(ex)CRT,(ex)lucas,(ex)BSGS,原根与指标入门,高次剩余,Miller_Rabin+Pollard_Rho)
注:转载本文须标明出处. 原文链接https://www.cnblogs.com/zhouzhendong/p/Number-theory.html 数论算法 剩余系相关 学习笔记 (基础回顾,(ex ...
- 你也可以手绘二维码(二)纠错码字算法:数论基础及伽罗瓦域GF(2^8)
摘要:本文讲解二维码纠错码字生成使用到的数学数论基础知识,伽罗瓦域(Galois Field)GF(2^8),这是手绘二维码填格子理论基础,不想深究可以直接跳过.同时数论基础也是 Hash 算法,RS ...
- LightOJ1214 Large Division 基础数论+同余定理
Given two integers, a and b, you should check whether a is divisible by b or not. We know that an in ...
- 「kuangbin带你飞」专题十四 数论基础
layout: post title: 「kuangbin带你飞」专题十四 数论基础 author: "luowentaoaa" catalog: true tags: mathj ...
- 数论day1 —— 基础知识(们)
[pixiv] https://www.pixiv.net/member_illust.php?mode=medium&illust_id=61632537 向大(hei)佬(e)势力学(di ...
随机推荐
- 0x01 - 我的第一个 Object Visitor
我的第一个 Object Visitor 预演准备 为了顺利的进行测试,你需要确保本地已经安装了以下这些必备的软件: dotnet 2.1 或者以上版本的 SDK,我们更建议直接安装 dotnet 5 ...
- JS如何实现远程控制:一步步教你掌握技术
@charset "UTF-8"; .markdown-body { line-height: 1.75; font-weight: 400; font-size: 15px; o ...
- vue devtools安装及使用
(1)chrome商店下载 进入浏览器的设置: 或者直接进入该网址:https://chrome.google.com/webstore/search/vue devtools?hl=zh-CN (2 ...
- PB EB ZB YB
1B字节=8bit位 1KB=2^10B 1MB=2^20B 1GB=2^30B 1TB=2^40B 1PB=2^50B(五个屁) 1EB=2^60B(六姨) 1ZB=2^70B(七个乌贼) 1YB= ...
- File与IO流之File练习
创建文件夹,并在其中创建文件 package Java_test; import java.io.*; public class Test { public static void main(Stri ...
- Spring Boot项目基于POI框架导出Excel表格
1. 依赖 我的项目是基于Spring Boot的,这里只贴出POI框架需要依赖的两个包,其他的都无所谓,只要能提供Controller让浏览器访问即可.在pom.xml配置文件中增加如下两个包 ...
- 【2020.11.17提高组模拟】数数(cuvelia) 题解
[2020.11.17提高组模拟]数数(cuvelia) 题解 题目描述 给你一个长度为n的序列\(a_1...a_n\).对于所有的\(k\in [1,n]\)选择序列中的\(k\)个数(下标为\( ...
- maixpy 常用例程整理
基础控制K210例程 1.1 使用屏幕和摄像头 例程 import sensor, lcd sensor.reset() sensor.set_pixformat(sensor.RGB565) sen ...
- FFmpeg开发笔记(六十三)FFmpeg使用vvenc把视频转为H.266编码
前面的两篇文章分别介绍了如何在Linux环境和Windows环境给FFmpeg集成H.266的编码器vvenc,接下来利用ffmpeg把视频文件转换为VVC格式,观察新生成的vvc视频能否正常播放. ...
- AWS学习笔记之Lambda执行权限
最近在网上看到一道关于AWS Lambda的题,十分有意思: A developer has an application that uses an AWS Lambda function to up ...