【基础向】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 ...
随机推荐
- 正点原子ALPHA开发板使用4.3寸触摸屏LCD驱动实验显示不正常
显示问题 裸机开发时,驱动教程的PDF里给了4.3寸LCD屏幕的设置参数.如下图所示: 但是按照这个设置,编写设备树dts文件,下载到开发板里,却出现了显示异常,具体来说就是帧率不对,图和字都是歪斜的 ...
- vue3 基础-Pinia 可能替代 Vuex 的全局数据状态管理
Pinia 初体验 Pinia.js是由Vue.js团队核心成员开发的新一代状态管理器,使用Composition Api进行重新设计的,也被视为下一代Vuex. Pinia是一个Vue的状态管理库, ...
- TVM Pass优化 -- 公共子表达式消除(Common Subexpr Elimination, CSE)
定义(What) 公共子表达式消除 就是如果表达式E的值已经计算的到了,并且自计算的到值后E的值就不再改变了,就说,表达式E在后续计算中是一个公共表达式. 简单说,该表达式上面已经执行过了,下面没必要 ...
- Palindrome Number——LeetCode进阶路⑨
//原题链接https://leetcode.com/problems/palindrome-number/ 题目描述 Determine whether an integer is a palind ...
- .NET外挂系列:7. harmony在高级调试中的一些实战案例
一:背景 1. 讲故事 如果你读完前六篇,我相信你对 harmony 的简单使用应该是没什么问题了,现在你处于手拿锤子看谁都是钉子的情况,那这篇我就找高级调试里非常经典的 3个钉子 让大家捶一锤. 二 ...
- Spring Boot注解之@Async和自定义线程池
前言 我们在学习线程池的时候,都知道线程池的核心线程数.最大线程数.线程工厂等核心参数非常重要,故熟记于心.但是有些工作五六年的攻城狮可能说不出来怎么初始化一个全局线程池,以在不同场景使用:所以, ...
- linux下wget静默模式下载
说明 在一些场景下,文件较大时,通过wget下载会展示时候进度,输出太多,这里我们如果想屏蔽输出可以采取静默模式 wget --quiet http://fileserver.test.com/cud ...
- ABAP中字符串相关比较
The following table shows the relational operators for comparisons between character-like operands ( ...
- 十四、buildroot 系统package新增应用 编写规则
4.7.2.编写规则 1.规范概述 Buildroot 像一个「自动化厨房」,每个包是一道菜.如果菜名(包名).食材位置(路径).做法(脚本)不统一,厨房会报错.规范是让机器人(Buildroot ...
- HarmonyOS NEXT仓颉开发语言实现画板案例
大家上午好,今天分享一下仓颉开发语言实现的画板案例. 最近总是有同学说我写ArkTS冒充仓颉,为了自证清白,截图给大家看一下,确实是仓颉文件: 仓颉提供了画布组件Canvas,我们所有的绘制工作都要在 ...