写在前面
amodb=(a−⌊ab⌋∗b)
代数推导天地灭,组合意义保平安
1.辗转相减
利用辗转相减法求最大公约数, 即 gcd(a,b)。假设 a>b, 则 gcd(a, b) =gcd(a − b, b), 不断的利用大的数减去小的数,就能得到最大公约数。
1.证:若n,m(n>m)互质,则 (n−m),m互质
若不互质,则设 n−m=k∗a,m=k∗b
∴n−k∗b=k∗a
∴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、多边形边界上的格点数目k:S=n+k2−1

∵gcd(a,b)=1
∴AO上无整点
在矩形ABCO中找离AO最近的格点P(n,m)
ΔAPO 边界上和内部无整点(如果有的话那个点肯定跟优,与假设矛盾)
∴SΔAPO=0+32−1=12
$\because AO=\sqrt{a2+b2} $
∴PH=|bn−am|√a2+b2 (点到直线距离公式)
∴SΔAPO=12√a2+b2∗|bn−am|√a2+b2=12|bn−am|
∴|bn−am|=1
所以当$\left{x=m y=−n\right. 或\left{x=−m y=n\right. $时等式成立
所以当 c 是 gcd(a, b) 的倍数的时候,方程有解,将x,y同时扩大多少倍即可
若b∗x1+amodb∗y1=gcd(a,b)
∴b∗x1+(a−⌊ab⌋∗b)∗y1=gcd(a,b)
∴a∗y1−b∗(x1−⌊ab⌋∗y1)=gcd(a,b)
∴x=y1,y=x1−⌊ab⌋∗y1
(代码有些不好理解)
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
∴ab≡xmodp
∴a≡bx(modp)
设 amodp=k1.....n
bxmodp=k2.....n
∴k1∗p+n=a,k2∗p+n=bx
∴k2∗p+a−k1∗p=bx
∴a+p∗(k2−k1)=bx
∴p∗(k1−k2)+bx=a
既然a,b,p都知道,我们就可以用exgcd啦
有理数取余
ab≡x(modp)
a≡bx(modp)
先求1≡bx1(modp)
再将a≡b∗a∗x1(modp)
a∗x1即为所求答案
4.高斯消元
非常好理解,之前我被 @【数据删除】称为高斯消元高手,为了不负期望,我决定复习一次。
#include<iostream>
using namespace std;
int n,st;
double a[105][105];
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]);
}
if(a[i][i]==0){
puts("No Solution");
return 0;
}
for(int j=1;j<=n+1;j++){
if(i!=j){
for(int k=i+1;k<=n+1;k++){
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 产生影响假设其他数乘起来也就是M1模mod1那么我们只需将这个模数扩大即可。所以要求下逆元再乘a1就可以了
EXCRT
这个不可以用在crt上吗qwq
考虑合并
x=k1∗mod1+a1
x=k2∗mod2+a2
k1∗mod1+a1=k2∗mod2+a2
a1−a2=k2∗mod2−k1∗mod1
使用exgcd求出特解k1
将k1带回去就是x那么x的通解就是x+k∗lcm(mod1,dmo2)
逻辑运算
eeeeeeee,学学玩的
-
对于一个仅由∧或∨(加不加!)都一样是满足交换律的,枚举易证.
-
!(p∧q)=!p∨!q
-
!(p∨q)=!p∧!q
-
韦恩图很厉害,能解决三个命题以下的问题
写于8月28的莫反,今天励志要学懂。莫反听一遍不懂一遍
一、数论分块
1.最大的使⌊nx⌋=⌊ni⌋的x是⌊n⌊ni⌋⌋
证:
设⌊ni⌋=k
∵k≤ni
∴⌊nk⌋≥⌊nni⌋
∴⌊nk⌋≥i
∴i≤⌊nk⌋
因为k是定值,那么i的最大值就是⌊n⌊ni⌋⌋
二、积性函数
证:ϕ为积性函数
ϕ(n)=n∗∏p1|n(1−1p1)
ϕ(m)=m∗∏p2|m(1−1p2)
gcd(n,m)=1
因为互质,所以任意p1都不等于p2,得证
证:∑d|nϕ(d)=n
OI-wiki上的证法比zb妙一点。
首先设f(x)为gcd(i,n)=x的i的个数
∑ni=1f(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|ndk当k=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=∏pcii,m=∏pi
原式=∑d|mμ(d)=[m=1]
设因数个数为k
∑d|mμ(d)=∑ki=0(ki)(−1)i
=∑ki=0(ki)(−1)i∗1k−i
二项式定理
=((−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为数论函数(定义域为整数的函数,通常值域也为整数)
(f∗g)(n)=∑d|nf(d)g(nd)
证:若f,g为积性函数,那么f * g也是积性函数
(f∗g)(n)=∑d|nf(d)g(nd)
(f∗g)(m)=∑d|mf(d)g(md)
(f∗g)(nm)=∑d|nmf(d)g(nmd)
(f∗g)(n)∗(f∗g)(m)=∑d|nf(d)g(nd)⋅∑d|mf(d)g(md)
(f∗g)(n)∗(f∗g)(m)=∑d1|n,d2|mf(d1)g(nd1)f(d2)g(md2)
(f∗g)(nm)=∑d1|n,d2|mf(d1d2)g(nmd1d2)
因为gcd(n,m)=1
(f∗g)(nm)=∑d|nmf(d)g(nmd)
idk∗1=σk
(idk∗1)(n)=∑d|nidk(d)
(idk∗1)(n)=∑d|ndk
ϕ∗1=id
(ϕ∗1)(n)=∑d|nϕ(d)
(ϕ∗1)(n)=n
五、狄利克雷卷积的性质
交换律
对称性易得
结合律
(f∗g)∗h(n)=f∗(g∗h)(n)
左式=∑d|n(f∗g)(d)h(nd)
=∑d|nh(nd)∑d1|df(d1)g(dd1)
右式=∑d|n(g∗h)(d)f(nd)
=∑d|nf(nd)∑d1|dg(d1)h(dd1)
因为都穷尽了将n=a⋅b⋅c的方案,所以相等
分配律
f∗(g+h)(n)=f∗g(n)+f∗h(n)
原式=∑d|nf(d)∗(g(nd)+h(nd))
=∑d|nf(d)∗g(nd)+∑d|nf(d)∗h(nd)
即f∗g(n)+f∗h(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∗μ
狄利克雷逆元
若f∗g=e那么g就是f的逆元,g记作f−1
证 f−1为
\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)=(g∗1)(n)=∑d|ng(d)
g(n)=(f∗μ)=∑d|nf(d)μ(nd)
f=g∗1那么g=f∗μ
f=g∗1
f∗μ=g∗1∗μ
f∗μ=g∗e
f∗μ=g
交换求和顺序
是个很好用的东西
∑ni=1∑mj=1ai,j=∑mj=1∑ni=1ai,j
∑ni=1∑mj=iai,j=∑mj=1∑i=1jai,j
∑ni=1∑ij=1ai,j=∑mj=1∑i=jnai,j
上面几个画图很好理解,还可以通过考虑贡献来解决
若是更一般的求和式,如何处理呢?
交换原则:入内求交,出外求并
意思是:外层变量移动到内层,需要将内外限制条件取交以限制它;
而内层变量移动到外层,需求内外限制条件的并。
外层 i∈A, 内层 j∈B(i),
-> 外层 j∈⋃B(i), 内层 i∈i∈A|j∈B(i)
将上面的用一下试试
∑ni=1∑nj=iai,j
j的范围⋃ni=1[i,n]=[1,n]
i的范围[1,n]⋃[j,n]=[1,j]
i的范围来自于i自己的限定和如果固定j对i的限定
∑ni=1∑ij=1ai,j
j的范围⋃ni=1[1,i]=[1,n]
i的范围[1,n]⋂[j,n]=[j,n]
例1:不会
∑ni=1ϕ(i)⌊ni⌋
∑ni=1ϕ(i)∑ni|j1
∑ni=1∑ni|jϕ(i)
∑nj=1∑i|jϕ(i)
∑nj=1j
n∗(n+1)2
例2:莫比乌斯反演的另一种证法
已知f(n)=∑d|ng(d)
求证g(n)=∑d|nf(nd)μ(d)
原式=∑d|n∑d1|ndg(d1)μ(d)
=∑d|n∑d1|ndg(d1)μ(d)
交换原则:入内求交,出外求并
d1范围,显然d1范围是d1|n,因为对称性,将d1|nd变为d1|n易证
d范围,考虑d1固定时对d有什么限制。nd为d1倍数,那么d就为\frac{n}{d1}因数,证明:
nd=k⋅d1
nd1=k⋅d
=∑d1|n∑d|ndg(d1)μ(d)
=∑d1|ng(d1)∑d|nd1μ(d)
=∑d1|ng(d1)[nd1=1]
=g(n)
请注意:求并操作做了n次,这是因为内层变量在枚举过程中受到外层n次限制。而求交操作只做一次,因为内层无论怎么变,对外层没有影响,提到外面,范围作形式保留
常见的5个数论函数线性筛求法
交换求和技巧
比较全的笔记
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 【杂谈】分布式事务——高大上的无用知识?