【基础向】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 ...
随机推荐
- 详解SLAM中的李群和李代数(中)
1 概述 在上一篇文章<详解SLAM中的李群和李代数(上)>中,我们已经通过对李群求导引出了李代数.在这篇文章中,我们就系统总结一下李代数的相关知识. 2 李代数 2.1 定义 李代数是一 ...
- 解析V8引擎底层原理,探究其优异性能之谜
@charset "UTF-8"; .markdown-body { line-height: 1.75; font-weight: 400; font-size: 15px; o ...
- GIM发布新版本了 (附rust CLI制作brew bottle流程)
GIM 发布新版本了!现在1.3.0版本可用了 https://github.com/davelet/git-intelligence-message/releases/tag/v1.3.0 .可以通 ...
- 1-1, 一个简单的mysql 安装教程,基于mysql 5.7解压版本.
下载mysql. 略,去官网 1. 配置my.cnf. 把mysql提供的配置模板 copy到/etc/my.cnf (先读取/etc/my.cnf,再去读/etc/mysql/my.cnf,第三个读 ...
- SQL注入入门实例讲解(NewsCenter
今天写了个sql注入的题目(也是跟着教程做的hhh),过程中有些心得体会,想着写篇博客总结一下. 笔者也是初学者,如有哪里讲错了,欢迎大佬在评论区点出 题目来源:攻防世界web进阶区,NewsCent ...
- c++复习板子
数论 GCD 点击查看 B4025 最大公约数 gcd: 点击查看代码 #include<bits/stdc++.h> #define int long long using namesp ...
- CSP-S 2020模拟训练题1-信友队T2 挑战NPC
题意简述 有一个\(k\)维空间,每维的跨度为\(L\),即每一维的坐标只能是\(0,1, \cdots ,L-1\).每一步你可以移动到任意一个曼哈顿距离到自己小于等于\(d\)的任意一个合法坐标. ...
- 使用Git修改文件名字的大小写
问题背景 最近发现window对文件名的大小写不敏感,如果想把文件夹start,修改成Start,让git有变化. 应该怎么做呢,直接看黑框操作步骤 解决方案 第一步:将文件(夹)更改大小写 $ mv ...
- kubernetes之subpath的使用
一.subpath简单说明 在Pod中共享卷以供多方使用是很有用的.VolumeMounts.subPath属性可用于指定所引用的卷内的子路径,而不是其根路径. 二.subpath使用场景 1个Pod ...
- 关于python的一些学习笔记
一种是利用三引号的方法.三引号下默认允许自动换行,第二种就是在文字之间插入\n这种方式(使用转义字符) 这里是关于转义字符的一些总结. 2.关于运算符号 小学除法取余%,中学开n方**,小学除法取整/ ...