数论学习笔记

写在前面

amodb=(aabb)

代数推导天地灭,组合意义保平安

1.辗转相减

利用辗转相减法求最大公约数, 即 gcd(a,b)。假设 a>b, 则 gcd(a, b) =gcd(a − b, b), 不断的利用大的数减去小的数,就能得到最大公约数。

1.证:若n,m(n>m)互质,则 (nm),m互质

若不互质,则设 nm=ka,m=kb

nkb=ka

n=k(a+b),与n,m互质矛盾,得证

我们发现当 a 一直大于 b 的时候,就会一直减去 b,其实就是变成 a%b,所以就变成了辗转相除

2.扩展欧几里得(exgcd)

解的存在性:

裴蜀定理

对于任意n个整数,存在以种线性组合使得其等于所有数的最大公约数。

a,b是整数,且gcd(a,b)=k,那么对于任意的整数x,y,ax+by都一定是k的倍数。

证:一定存在整数x,y,使ax+by=gcd(a,b)成立。

不太好证,采用数形结合的方法

皮克定理 : 给定顶点坐标均是整点(或正方形格点)的简单多边形,面积S和内部格点数目n、多边形边界上的格点数目kS=n+k21

gcd(a,b)=1

AO上无整点

在矩形ABCO中找离AO最近的格点P(n,m)

ΔAPO 边界上和内部无整点(如果有的话那个点肯定跟优,与假设矛盾)

SΔAPO=0+321=12

$\because AO=\sqrt{a2+b2} $

PH=|bnam|a2+b2 (点到直线距离公式)

SΔAPO=12a2+b2|bnam|a2+b2=12|bnam|

|bnam|=1

所以当$\left{x=m y=n\right. \left{x=m y=n\right. $时等式成立

所以当 c 是 gcd(a, b) 的倍数的时候,方程有解,将x,y同时扩大多少倍即可

bx1+amodby1=gcd(a,b)

bx1+(aabb)y1=gcd(a,b)

ay1b(x1aby1)=gcd(a,b)

x=y1,y=x1aby1

(代码有些不好理解)
exgcd大致分为两步:
先求出gcd 然后利用这个gcd解出一个解(不是真真的解),然后不断扩大

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

3.乘法逆元

abmodp=x

abxmodp

abx(modp)

amodp=k1.....n

bxmodp=k2.....n

k1p+n=a,k2p+n=bx

k2p+ak1p=bx

a+p(k2k1)=bx

p(k1k2)+bx=a

既然a,b,p都知道,我们就可以用exgcd啦

有理数取余

abx(modp)

abx(modp)

先求1bx1(modp)

再将abax1(modp)

ax1

4.高斯消元

非常好理解,之前我被 @【数据删除】称为高斯消元高手,为了不负期望,我决定复习一次。

#include<iostream>
using namespace std;
int n,st;
double a[105][105];//第i个方程的第j个未知数的系数
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n+1;j++){
			cin>>a[i][j];
		}
	}
	for(int i=1;i<=n;i++){
		int st=i;
		for(int j=i+1;j<=n;j++){
			if(a[j][i]>a[st][i]){//选取一个最大值减小误差
				st=j;
			}
		}
		for(int j=1;j<=n+1;j++){
			swap(a[i][j],a[st][j]);//i和st对换
		}
		if(a[i][i]==0){
			puts("No Solution");
			return 0;
		}
		for(int j=1;j<=n+1;j++){
			if(i!=j){
           //当前消到第i个未知数,那么当做到第j个方程时,其第i个未
           //知数的系数就是a[j][i],那么这个方程就应该整体减去
           //a[j][i]/a[i][i]倍的方程i
				for(int k=i+1;k<=n+1;k++){//前面已经都是0了
					a[j][k]-=a[i][k]*a[j][i]/a[i][i];
				}
			}
		}
	}
	for(int i=1;i<=n;i++){
		printf("%.2lf\n",a[i][n+1]/a[i][i]);
	}
	
	return 0;
}

CRT:

好文

不妨验证解为什么正确。以第一个方程为例因为乘了最小公倍数,因为两两互素那么其他乘上逆元不会对
mod1 产生影响假设其他数乘起来也就是M1mod1那么我们只需将这个模数扩大即可。所以要求下逆元再乘a1就可以了

EXCRT

这个不可以用在crt上吗qwq
考虑合并
x=k1mod1+a1

x=k2mod2+a2

k1mod1+a1=k2mod2+a2

a1a2=k2mod2k1mod1

使用exgcd求出特解k1

k1带回去就是x那么x的通解就是x+klcm(mod1,dmo2)

逻辑运算

eeeeeeee,学学玩的

  1. 对于一个仅由(加不加!)都一样是满足交换律的,枚举易证.

  2. !(pq)=!p!q

  3. !(pq)=!p!q

  4. 韦恩图很厉害,能解决三个命题以下的问题

写于8月28的莫反,今天励志要学懂。莫反听一遍不懂一遍

一、数论分块

1.最大的使nx=ni的x是nni

证:
ni=k

kni

nknni

nki

ink

因为k是定值,那么i的最大值就是nni

二、积性函数

证:ϕ为积性函数

ϕ(n)=np1|n(11p1)

ϕ(m)=mp2|m(11p2)

gcd(n,m)=1

因为互质,所以任意p1都不等于p2,得证

证:d|nϕ(d)=n

OI-wiki上的证法比zb妙一点。

首先设f(x)gcd(i,n)=xi

i=1nf(i)=n(显然)

d|nf(d)=n

考虑f和ϕ的关系

显然f(x)=ϕ(nx)

然后因为对称性就完了

常见积性函数

单位函数e(n)=[n=1]

幂函数idk(n)=nk其中id1(n)常被记作id(n)

常函数k(n)=k

除数函数σk(n)=d|ndkk=0时为因数个数函数d(n)k=1时为因数和函数为σ(n)

欧拉函数ϕ(n)=[gcd(i,n)=1]

莫比乌斯函数
\mu(n)=\begin{rcases}    1\ \ \ \ \ \ \ \  \ \ \ \ n=1 \\    0\ \ \ \ \ \ \ \  \ \ \ \ n有平方因子 \\    (-1)^{k} ,k为n的本质不同质因子个数\end{rcases}

三、莫比乌斯函数

证积性

感性一下,如果和μ(1)乘显然,然后和不为1的乘也显然

d|nμ(d)=[n=1]

n=pici,m=pi

原式=d|mμ(d)=[m=1]

设因数个数为k

d|mμ(d)=i=0k(ki)(1)i

=i=0k(ki)(1)i1ki

二项式定理

=((1)+1)k

线性筛求miu

void get(){
    miu[1]=1;
    for1(i,2,n){
        if(!vis[i]){
            miu[i]=-1;
            cnt++;
            num[cnt]=i;
        }
        for(int j=1;i*num[j]<=n&&j<=cnt;j++){
            vis[i*num[j]]=1;
            if(i%num[j]==0){
                miu[i*num[j]]=0;
                break;
            }
            miu[i*num[j]]=-miu[i];
        }
    }
}

四、狄利克雷卷积

* 表示卷积 ·表示乘。f,g为数论函数(定义域为整数的函数,通常值域也为整数)

(fg)(n)=d|nf(d)g(nd)

证:若f,g为积性函数,那么f * g也是积性函数

(fg)(n)=d|nf(d)g(nd)

(fg)(m)=d|mf(d)g(md)

(fg)(nm)=d|nmf(d)g(nmd)

(fg)(n)(fg)(m)=d|nf(d)g(nd)·d|mf(d)g(md)

(fg)(n)(fg)(m)=d1|n,d2|mf(d1)g(nd1)f(d2)g(md2)

(fg)(nm)=d1|n,d2|mf(d1d2)g(nmd1d2)

因为gcd(n,m)=1

(fg)(nm)=d|nmf(d)g(nmd)

idk1=σk

(idk1)(n)=d|nidk(d)

(idk1)(n)=d|ndk

ϕ1=id

(ϕ1)(n)=d|nϕ(d)

(ϕ1)(n)=n

五、狄利克雷卷积的性质

交换律

对称性易得

结合律

(fg)h(n)=f(gh)(n)

左式=d|n(fg)(d)h(nd)

=d|nh(nd)d1|df(d1)g(dd1)

右式=d|n(gh)(d)f(nd)

=d|nf(nd)d1|dg(d1)h(dd1)

因为都穷尽了将n=a·b·c的方案,所以相等

分配律

f(g+h)(n)=fg(n)+fh(n)

原式=d|nf(d)(g(nd)+h(nd))

=d|nf(d)g(nd)+d|nf(d)h(nd)

fg(n)+fh(n)

单位元e

任何函数卷e都是自己

d|nf(d)e(nd)
当d=n时e为1,其他都为0,即为f(n)

e=μ1

原式=d|nμ(d)

即为e

μid=ϕ

ϕ1=id

ϕ=idμ

狄利克雷逆元

fg=e那么g就是f的逆元,g记作f1

f1

\begin{rcases}    \frac{1}{f(1)} \ \ \ \ \ \ \ \  \ \ \ \ n=1 \\    -\frac{1}{f(1)}\sum_{d|n,d>1} f(d)g(\frac{n}{d})\ \ \ \ otherwise\end{rcases}

当n=1时

d|1f(d)g(nd)

=f(1)g(1)=1

g(1)=1f(1)

else

d|nf(d)g(nd)=0

=f(1)g(n)d|n,d>1f(d)g(nd)

=f(1)(1f(1)d|n,d>1f(d)g(nd))+d|n,d>1f(d)g(nd)=0

得证

证积性函数的逆元也是积性函数

不会,但很好记

五、莫比乌斯反演的证明

f(n)=(g1)(n)=d|ng(d)

g(n)=(fμ)=d|nf(d)μ(nd)

f=g1那么g=fμ

f=g1

fμ=g1μ

fμ=ge

fμ=g

交换求和顺序

是个很好用的东西

i=1nj=1mai,j=j=1mi=1nai,j

i=1nj=imai,j=j=1mi=1jai,j

i=1nj=1iai,j=j=1mi=jnai,j

上面几个画图很好理解,还可以通过考虑贡献来解决

若是更一般的求和式,如何处理呢?
交换原则:入内求交,出外求并
意思是:外层变量移动到内层,需要将内外限制条件取交以限制它;
而内层变量移动到外层,需求内外限制条件的并。

外层 iA, 内层 jB(i),

-> 外层 jB(i), 内层 iiA|jB(i)

将上面的用一下试试

i=1nj=inai,j

j的范围i=1n[i,n]=[1,n]
i的范围[1,n][j,n]=[1,j]
i的范围来自于i自己的限定和如果固定j对i的限定

i=1nj=1iai,j
j的范围i=1n[1,i]=[1,n]
i的范围[1,n][j,n]=[j,n]

例1:不会

i=1nϕ(i)ni
i=1nϕ(i)i|jn1
i=1ni|jnϕ(i)
j=1ni|jϕ(i)
j=1nj
n(n+1)2

例2:莫比乌斯反演的另一种证法

已知f(n)=d|ng(d)

求证g(n)=d|nf(nd)μ(d)

原式=d|nd1|ndg(d1)μ(d)

=d|nd1|ndg(d1)μ(d)


交换原则:入内求交,出外求并

d1范围,显然d1范围是d1|n,因为对称性,将d1|nd变为d1|n易证

d范围,考虑d1固定时对d有什么限制。ndd1倍数,那么d就为\frac{n}{d1}因数,证明:

nd=k·d1

nd1=k·d


=d1|nd|ndg(d1)μ(d)

=d1|ng(d1)d|nd1μ(d)

=d1|ng(d1)[nd1=1]

=g(n)

请注意:求并操作做了n次,这是因为内层变量在枚举过程中受到外层n次限制。而求交操作只做一次,因为内层无论怎么变,对外层没有影响,提到外面,范围作形式保留

常见的5个数论函数线性筛求法

交换求和技巧

比较全的笔记

posted @   wuhupai  阅读(20)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 【杂谈】分布式事务——高大上的无用知识?
点击右上角即可分享
微信分享提示