首页 > 其他分享 >[复习] 数论基础

[复习] 数论基础

时间:2024-10-24 11:33:17浏览次数:5  
标签:frac 复习 数论 bmod 基础 varphi times sum gcd

[复习] 数论基础

模运算

\[(a\pm b)\bmod p=((a\bmod p)\pm(b\bmod p))\bmod p \]

\[(a\times b)\bmod p=((a\bmod p)\times(b\bmod p))\bmod p \]

积性函数

\[\forall\gcd(x,y)=1,f(xy)=f(x)\times f(y) \]

完全积性函数

\[\forall x,y\in N^+,f(xy)=f(x)\times f(y) \]

gcd

由欧几里得定理

\(\gcd(a,0)=a,\gcd(a,b)=\gcd(b,a\bmod b)\)。

exgcd

用于求解 \(ax+by=\gcd(a,b)\) 的解。

如果 \(x_0,y_0\) 是 \(bx+(a\bmod b)\times y=\gcd(b,a\bmod b)\) 的解。

那么 \(x=y_0,y=x_0-\lfloor\frac a b\rfloor \times y_0\) 是 \(ax+by=\gcd(a,b)\) 的解。

int exgcd(int a,int b,int &x,int y){
	if(b==0) { x=1,y=0; return a; }
    int d=exgcd(b,a%b,y,x);
    y-=a/b*x;
    return d;
}

线性同余方程

求解 \(ax\equiv b\pmod m\)。

那么 \(ax+km=b\)。

就变成了求解线性不定方程。

线性不定方程

求解 \(ax+by=c\)。

如果 \(\gcd(a,b)\nmid c\),那么方程无解。

否则我们可以求解 \(ax+by=\gcd(a,b)\),的解 \(x_0,b_0\)。

那么 \(ax+by=c\) 的其中一组整数解就是 \(x_1=x_0\times \frac{c}{\gcd(a,b)},y_1=y_0\times \frac{c}{\gcd(a,b)}\)。

而任意解可以表示为 \(x=x_1+k\times\frac{b}{\gcd(a,b)},y=y_1-k\times \frac a {\gcd(a,b)}\)。

(扩展)中国剩余定理

\[x\equiv a_1\pmod {m_1} \]

\[x\equiv a_2\pmod {m_2} \]

那么有 \(x=k_1m_1+a_1=k_2m_2+a_2\)。

\[k_1m_1-k_2m_2=a_2-a_1 \]

用 \(exgcd\) 求解,若无解则说明同余方程组无解。

然后两个同余方程化为一个同余方程

\[x\equiv k_1m_1+a_1\pmod {lcm(m_1,m_2)} \]

欧拉函数

\[\varphi(n)=\sum_{i=1}^n[\gcd(n,i)=1] \]

\[\sum_{i\mid n}\varphi(n)=n \]

\[n=\prod_{i=1}^kp_i^{c_i}(p_i\in prime,p_i\ne p_j)\Rightarrow\varphi(n)=n\times\prod_{i=1}^k\dfrac {p_i-1} {p_i} \]

\[\forall \gcd(i,j)=1,\varphi(ij)=\varphi(i)\times\varphi(j) \]

(扩展)欧拉定理

\[\forall \gcd(a,p)=1,a^b\equiv a^{b\bmod \varphi(p)}\pmod p \]

\[a^b\equiv a^{(b\bmod \varphi(p))+\varphi(p)}\pmod p \]

费马小定理

由欧拉定理,当 \(p\) 为质数时

\[a^p\equiv a \pmod p \]

\[a^{p-1}\equiv 1\pmod p \]

\[a^{p-2}\equiv a^{-1}\pmod p \]

乘法逆元

当 \(\gcd(a,m)=1\) 时,定义 \(a\) 的乘法逆元 \(a^{-1}\) 为

\[ax\equiv 1\pmod m \]

的解。

方法一

当 \(m\) 为质数时,由费马小定理,\(a^{p-2}\equiv a^{-1}\pmod m\)。

方法二

用 \(exgcd\) 求解 \(ax+mk=1\) 这个不定方程。

当且仅当 \(\gcd(a,m)=1\) 时有解。

Lucas定理

\[\binom n m\bmod p=\binom {\lfloor n/p\rfloor}{\lfloor m/p\rfloor}\times \binom {n\bmod p}{m\bmod p}\bmod p \]

整除分块(数论分块)

我们有

\[\dfrac{\lfloor\frac{x}{y}\rfloor}{z}=\lfloor \dfrac{x}{yz}\rfloor \]

\[\sum_{i=1}^n\lfloor\frac ni\rfloor \]

结论 \(x=\lfloor\frac{n}{\lfloor\frac{n}{i}\rfloor}\rfloor\) 是最大的满足 \(\lfloor\frac{n}{x}\rfloor=\lfloor\frac{n}{i}\rfloor\) 的 \(x\)。

狄利克雷卷积

定义 \(f(x)\) 和 \(g(x)\) 狄利克雷卷积 \(h=f*g\) 为

\[h(x)=\sum_{d\mid x} f(d)g(\frac{x}{d})=\sum_{ab=x}f(a)g(b) \]

狄利克雷卷积有交换律、结合律、分配律。

几个基础数论函数

\[I(n)=1 \]

\[id(n)=n \]

\[\varepsilon(n)=[n=1] \]

\[d(n)=\sum_{i\mid n} 1 \]

\[\sigma(n)=\sum_{i\mid n}i \]

其中 \(\varepsilon\) 是单位元,对于任意函数 \(f\) 都有 \(f*\varepsilon =f\)。

如果 $f*g=\varepsilon $,则 \(g\) 是 \(f\) 的逆元。

性质

  • 两个积性函数的卷积是积性函数。
  • 积性函数的逆元是积性函数。

莫比乌斯函数

定义

\[n=\prod _{i=1}^kp_i^{c_i}(p_i\in pirme,p_i\ne p_j)\\ \mu(n)=\left\{ \begin{aligned} 1 & ,& n=1 \\ (-1)^k & ,& \forall c_i=1 \\ 0 & ,& \exists c_i>1 \end{aligned} \right. \]

性质

  • 莫比乌斯函数是积性函数。
  • \(\sum_{i\mid n}\mu(i)=[n=1]\)。

莫比乌斯反演

\[f(x)=\sum_{d|x}g(x)\Leftrightarrow g(x)=\sum_{d|x} \mu(d)f(\frac xd) \]

各种卷积结论

\[\varepsilon=\mu*I\Leftrightarrow \varepsilon(n)=[n=1]=\sum_{d|n}\mu(d) \]

\[id=\varphi*I\Leftrightarrow id(n)=n=\sum_{d|n}\varphi(d) \]

\[d=I*I\Leftrightarrow d(n)=\sum_{d|n} 1 \]

\[\sigma=I*id\Leftrightarrow \sigma(n)=\sum_{d|n}d \]

拓展

\[\varphi=\mu*id\Leftrightarrow \varphi(n)=\sum_{d|n}d\times\mu(\frac nd) \]

推导:\(\mu*id=\mu*\varphi*I=\varepsilon*\varphi=\varphi\)

调和级数枚举

可用来得到每个数的因数,或处理因数有关的问题。

对于每个数,在 \(n\) 内枚举它的倍数,时间复杂度 \(O(n\ln n)\)。

for(int i=1;i<=n;++i)
    for(int j=i;j<=n;j+=i)
        do something;

埃氏筛

用来处理质因子有关的问题。

对于每个质数,在 \(n\) 内枚举它的所有倍数,时间复杂度是 \(O(n\log\log n)\)。

for(int i:pri)
    for(int j=i;j<=n;j+=i)
        do something;

欧拉筛

线性筛质数与积性函数。

把每个合数用它的最小质因子筛掉,时间复杂度 \(O(n)\)。

vector<int> pri;
bitset<N> no;
for(int i=2;i<=n;++i){
	if(!no[i])pri.push_back(i);
    for(int p:pri){
		if(i*p>n)break;
        no[i*p]=1;
        if(i%p==0)break;
    }
}

约数个数

\[n=\prod p_i^{c_i} \]

\[d(n)=\prod (c_i+1) \]

线性筛时需要记录最小质因子的指数。

约数和

\[n=\prod p_i^{c_i} \]

\[\sigma(n)=\prod(1+p_i+p_i^2+\dots+p_i^{c_i}) \]

线性筛时需要记录最小质因子的 \((1+p+p^2+\dots+p^{c})\)。

素性测试

检测一个数是否是质数。

朴素做法

枚举 \([2,\sqrt n]\) 的整数,看是否有 \(n\) 的因数。

Fermat 素性测试

根据费马小定理,如果 \(n\) 为质数,那么对于 \(a\in[1,n-1]\) 有 \(a^{n-1}\equiv1 \pmod n\)。

我们可以随机 \(C\) 次 \([2,n-1]\) 的数,然后看是否满足条件,\(C\) 可取 \(10\) 左右,记得特判小于 \(3\) 的数。

时间复杂度 \(O(C\log n)\)。

mt19937 rnd(time(0));
bool isprime(int n){
	if(n<3)return n==2;
    for(int i=1;i<=10;++i){
        int a=rnd()%(n-2)+2;
        if(qpow(a,n-1,n)!=1) return 0;
    }
    return 1;
}

分解质因数

朴素做法

枚举 \([2,\sqrt n]\) 的数,看是否是 \(n\) 的因数,当前的数肯定是质数了,时间复杂度 \(O(\sqrt n)\)。

最后如果剩下 \(n>1\) 则剩下的 \(n\) 本身是一个质数。

for(int i=2;i*i<=n;++i){
    if(n%i==0){
        do something;
        while(n%i==0){
            do something;
            n/=i;
        }
    }
}
if(n>1){
    do something;
}

如果可以预处理出 \(\sqrt n\) 内的质数,则只需枚举质数,而质数个数是 \(O(\frac {n} {\ln n})\) 的,时间复杂度 \(O(\sqrt n+T\frac {\sqrt n}{\ln n})\)。

标签:frac,复习,数论,bmod,基础,varphi,times,sum,gcd
From: https://www.cnblogs.com/dccy/p/18499273

相关文章

  • Cursor零基础小白教程系列 - 创建你的第一个Cursor 项目
    最适合小白零基础的Cursor教程网站lookai.top相同作者,最新文章会在网站更新,欢迎收藏书签创建你的第一个Cursor项目实操视频概述开始使用Cursor进行编程的第一步是创建或导入一个项目。本指南将帮助您了解如何在Cursor中创建新项目、导入现有项目,以及进行一些基本的......
  • Matplotlib基础知识
    概念1.Matplotlib库:是一款用于数据可视化的Python软件包,支持跨平台运行,它能够根据NumPyndarray数组来绘制2D图像,它使用简单、代码清晰易懂2.Matplotlib图形组成:(1)Figure:指整个图形,您可以把它理解成一张画布,它包括了所有的元素,比如标题、轴线等(2)Axes:绘制2D图像的......
  • 人工智能理论基础之Numpy(迭代数组、数组操作、数组元素的增删改查、统计函数)
    文章目录前言一、迭代数组1、order参数2.flags参数3.op_flags参数10.数组操作10.1数组变维![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/6bf02c9132084106997478c5fceaf495.png)10.1.1flat10.1.2flatten()10.1.3ravel()10.2数组转置10.3修改数组维度......
  • Java基础day03---循环,数组,杨辉三角
    Java基础day03接day02----流程控制---3、循环一、循环循环语法结构执行逻辑通用for循环for(初始化;条件判断;步长设置){//循环体}第一次循环:初始化,条件判断,循环体,步长设置;第2-n次循环:条件判断,循环体,while循环while(判断条件){//循环体}先条件判断再执行循环体do.............
  • Cursor零基础小白教程系列「进阶」 - Cursor 智能代码补全详解(Tab)
    最适合小白零基础的Cursor教程网站lookai.top相同作者,最新文章会在网站更新,欢迎收藏书签Cursor智能代码补全详解(Tab)概述Cursor的智能代码补全,也就是快捷键Tab,是其最强大和独特的AI辅助编程工具之一。本教程将详细介绍Tab功能的使用方法,通过掌握Tab功能,您将显著提......
  • Docker 基础入门
    Docker基础入门前言在云计算和微服务架构日益盛行的今天,软件开发与部署的效率和灵活性成为了企业竞争力的关键因素之一。Docker,作为一种开源的容器化平台,凭借其轻量级、可移植性和易于管理的特性,迅速成为现代软件开发和运维领域的宠儿。本文主要总结一些Docker的基本概......
  • ctfshow-pwn-前置基础
    pwn13按照题目提示的信息,用gcc命令生成可执行文件,再运行即可得到flagpwn14题目提示:阅读以下源码,给定key为”CTFshow”,编译运行即可获得flag,那么我们直接看源代码开始有一个文件是否存在的检查,如果当前目录下不存在名为"key"的文件就会报错接下去就是通过循环将fp的值(也就......
  • 基础运算符
    10.基础运算符一.按功能分类 二.按操作个数分类 三.算术运算符//(前)++||--先改变值后进行操作  (后)++||--先进行操作后改变值//值为布尔类型数据 四.赋值运算符 五.比较运算符//!=表示不等于  且比较运算的结果是布尔类型的数据 六.instanceof的使......
  • 实验2 类和对象_基础编程1
    Task1t.h1#pragmaonce23#include<string>45//类T:声明6classT{7//对象属性、方法8public:9T(intx=0,inty=0);//普通构造函数10T(constT&t);//复制构造函数11T(T&&t);//移动构造函数12~T();//析......
  • 学期2024-2025-1 学号20241424 《计算机基础与程序设计》第5周学习总结
    学期2024-2025-1学号20241424《计算机基础与程序设计》第5周学习总结作业信息|这个作业属于2024-2025-1-计算机基础与程序设计)||-- |-- ||这个作业要求在|(https://www.cnblogs.com/rocedu/p/9577842.html#WEEK05))||这个作业的目标|<参考上面的学习总结模板,把学习过程通过......