首页 > 其他分享 >数论

数论

时间:2024-04-07 18:56:07浏览次数:21  
标签:lfloor frac gcd 数论 质数 rfloor times

前言

本篇文章主要是给未来的自己看的。由于证明不想直接给导致丧失思考能力,所以没写。还没写完 qwq~。

知识点

余数与质数:质数筛法,欧拉函数,欧几里得(ex),斐蜀定理,BSGS,同余的性质,逆元。

组合与矩阵:矩阵乘法,矩阵加速,高斯消元,组合数学,容斥原理......

......

详解

质数筛法

埃筛:找到质数,并枚举倍数,用质数的倍数筛掉非质数。

线性筛:用一个数最大的因数(除本身)筛去它。上面筛法的优化,不重复。具体的,枚举最大的因数,在搭配上质数去晒去那个数。

p[1]=1;
for(int i=2;i<=n;i++){
    if(!p[i])pri[++cnt]=i;
    for(int j=1;i*pri[j]<=n;j++){
        p[i*pri[j]]=1;
        if(i%pri[j]==0)break;
    }
}

欧拉函数

欧拉函数 \(\phi(n)\) 表示 \(\sum_{i=1}^{n}[\gcd(i,n)=1]\)。

重要性质:

\[\phi(n) = n \times \prod_{d|n}(1-\frac{1}{d}) \]

\[\phi(n) \times \phi(m) = \phi(n*m) [\gcd(n,m)=1] \]

由第二条性质,我们就可以用线性筛来得到每个数的欧拉函数值。

p[1]=phi[1]=1;
for(int i=2;i<=n;i++){
	if(!p[i]) pri[++cnt]=i,phi[i]=i-1;
	for(int j=1;j<=cnt&&i*pri[j]<=n;j++){
		p[i*pri[j]]=true;
		if(i%pri[j]==0){
			phi[i*pri[j]]=phi[i]*pri[j];
			break;
		}
		phi[i*pri[j]]=phi[i]*(pri[j]-1);
	}
}

欧几里得算法

就是辗转相除法。

\[\gcd(a,b) = \gcd(b,a \bmod b) \]

先介绍一下斐蜀定理。

即:对于任意可以写为 \(ax +by = c\) 的方程,如果 \(\gcd(a,b)|c\),方程一定有整数解。

这样,我们就可以用拓展欧几里得算法来求出方程的解。

拓展欧几里得

\(ax +by = \gcd(a,b)\)

我们需要不断递归,最后求出解。

\[ax + by = \gcd(a,b) \]

\[a \bmod b=a-b\times\lfloor\frac{a}{b}\rfloor \]

\[bx' + (a-b\times\lfloor\frac{a}{b}\rfloor)y' = \gcd(b,a-a\times\lfloor\frac{a}{b}\rfloor) \]

\[bx' + ay'-b\times\lfloor\frac{a}{b}\rfloor y' = \gcd(b,a-a\times\lfloor\frac{a}{b}\rfloor) \]

\[ay'+b(x'-\lfloor\frac{a}{b}\rfloor y')= \gcd(b,a-a\times\lfloor\frac{a}{b}\rfloor) \]

由此可得,递归的上一层的解 \(x\) 和 \(y\) 与当前层的解 \(x'\) 和 \(y'\) 关系是这样的:\(x=y'\),\(y=(x'-\lfloor\frac{a}{b}\rfloor y')\)。

BSGS

求解:

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

\(p\) 为质数。

设一个数 \(t=\lceil \sqrt{p}\rceil\),令 \(x = i \times t -j\)。

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

\[a^{i\times t - j} \equiv b \pmod p \]

\[a^{i\times t} \equiv b \times a^j\pmod p \]

这样可以暴力枚举 \(j\),放入 Hash 表中,在枚举 \(i\) 取相等,如果有且为找到的第一个,最小解为 \(i\times t-j\)。

显然,当 \(\gcd(a,p)=1\) 时才有解。

同余的性质

就很简单,不想写。

逆元

当 \(\gcd(a,m)=1\) 时,若 \(ax \equiv 1 \pmod m\),则我们称 \(x\) 是关于模 \(m\) 的逆元,即为 \(a^{-1}\)。

求逆元

标签:lfloor,frac,gcd,数论,质数,rfloor,times
From: https://www.cnblogs.com/xdh2012/p/18094106

相关文章

  • 【算法】数论
    题目链接前言疑似是有点不会数学了,照着题解推式子都推了小半个下午,还看不出来减法公式,唉。题解考虑把这些\(f(a,b)\)异或起来再模一个数不会有很好的性质,所以要把每一个\(f(a,b)\)都算出来。由加法公式得\[f(a,b)=\sum\\tbinom{b}{i}\tbinom{n-i}{a}\]\[=\sum\tbin......
  • 数论的各种板子2.0 (约数和 和 约数个数和)
    ​#include<bits/stdc++.h>//求约数和#include<map>usingnamespacestd;constintmod=1e9+10;typedeflonglongll;intmain(){ intn; cin>>n; unordered_map<int,int>primes; while(n--){ intx; cin>>x; for(inti=2......
  • 数论的各种板子1.0
    仅为了记录所学的知识.boolis_prime(intx){//求是否为素数 if(x<2)returnfalse; for(inti=2;i<=x/i;++i){ if(x%i==0)returnfalse; } returntrue;}voiddivide(intx){//分解质因子 for(inti=2;i<=x/i;++i){ ints=0; while(x%i==0)x/=i,s++; cou......
  • 数论分块学习笔记
    数论分块学习笔记性质数论分块用于快速计算含有除法向下取整的和式,即形如\(\sum_{i=1}^nf(i)g(\lfloor\frac{n}{i}\rfloor)\)的式子。当预处理出\(f\)的前缀和时,数论分块可以在\(O(\sqrt{n})\)的时间复杂度下计算上述和式的值。求解引理\(1\):\(\foralla,b,c\in\math......
  • 数论:整除与素数
    整除与素数素数\(\pi(n)\)表示不小于\(n\)的正整数中素数的个数。素数个数估计:\(\pi(n)\sim\dfrac{n}{\lnn}\)。Meissel-LehmerMeissel-Lehmer在亚线性时间内求出\(\pi(n)\)。。。。线性筛素数核心:让每一个合数被其最小质因数筛到。for(inti=2;i<=n;++i)......
  • 数论:数论函数
    数论函数积性函数积性函数:对于任何互质的整数有\(f(a\cdotb)=f(a)\cdotf(b)\)的数论函数。完全积性函数:对于任何整数有\(f(a\cdotb)=f(a)\cdotf(b)\)的数论函数。常见积性函数:欧拉函数\(\varphi\),莫比乌斯函数\(\mu\),因数个数函数\(\tau\),因数和函数\(\si......
  • 级数论
    数项级数函数项级数幂级数傅里叶级数......
  • 数论-完全平方数的一些小性质
    完全平方数的判定:偶指奇因:分解质因数后质因数的指数都是偶数因数的个数有奇数个。平方数的末尾0、1、4、5、6、9平方数的余数平方差的特征\[a^2-b^2=(a+b)*(a-b)\]\[a+b和a-b的奇偶性一致\]\[奇偶性一致在数学上的表示:X-Y=偶数\]\[(a+b)-(a-b)=2b,为偶数......
  • 数论分块
    文章借用: 浅谈数论分块-洛谷专栏(luogu.com)求$\sum_{i=1}^n\lfloor\frac{n}{i}\rfloor$,其中$n$为常数。为了方便我们的研究,我使用绘图软件画出了$f(x)=\frac{7}{x}(1\leqx\leq7)$的图像,也就是一种反比例函数的图像。 因为求的值是向下取整的,显然函数$f(x)$......
  • 关于数论
    前由于博主比较蒻尚在学习所以先鸽亿会欧拉筛Elaina'scodeintn,phi[N],prime[N],cnt;boolpri[N];voidPhi(){ mst(pri,1); phi[1]=1; for(inti=2;i<=n;i++){ if(pri[i]){ prime[++cnt]=i; phi[i]=i-1; } for(intj=1;j<=cnt;j++){ intk=i*prime[......