同余
JohnJoeZhu · · 个人记录
同余(2019.12.4)
(为了巩固
讲解+题
题单
题单
准备定理
-
a\equiv b \pmod{m}$ 当且仅当 $m| \left( {a-b} \right) -
a\equiv b \pmod{m}$ 当且仅当存在$k$使得 $a=b+km - 费马小定理 当
p 为质数时,a^{p-1}\equiv 1 \pmod{p} - 欧拉定理 若
a\perp n (a,n 为正整数) ,则a^{\varphi(n)}\equiv 1\pmod{n} - 欧拉定理的推论 若
a\perp n (a,n 为正整数) ,则对于任意正整数b ,有a^b\equiv a^{b\bmod \varphi(n)}\pmod{n}
准备性质
对于整数
- 自反性
a \equiv a\pmod{m} - 对称性 若
a \equiv b\pmod{m}, 则b\equiv a\pmod{m} - 传递性 若
a \equiv b\pmod{m},b\equiv c\pmod{m}, 则a\equiv c\pmod{m} - 同加性 若
a \equiv b\pmod{m}, 则a+c \equiv b+c \pmod{m} - 同乘性 若
a \equiv b\pmod{m}, 则ac \equiv bc \pmod{m} - 一般情况下,若
a \equiv b\pmod{m},c\equiv d\pmod{m}, 则ac \equiv bd \pmod{m} - 同幂性 若
a \equiv b\pmod{m}, 则a^n\equiv b^n \pmod{m} - 互质性 若
a \bmod p=x,a \bmod q=x, 且p\perp q, 则a \bmod(pq)=x
扩展欧几里得算法
贝祖定理 当
欧几里得算法
接下来,我们来求解方程
当
那么
去括号,得
把
所以,
当
所以,我们就可以求
\\代码
int x,y;
int Exgcd(int a,int b)
{
if(b==0)
{
x=1;
y=0;
return a;
}
//if(b!=0)
int gcd=Exgcd(b,a%b);
int t=x;
x=y;
y=t-a/b*y;
return gcd;
}
接下来,我们来求解不定方程
当
先利用
转化,得
合并,得
所以该方程有一组解为
因为
所以该不定方程的通解为
当
例题
P1516 青蛙的约会 建立不定方程,求最小解
P2421 荒岛野人 建立不定方程,求可行最小解
线性同余方程
定义:已知整数
推导过程:
因此,我们只需要求解上面的不定方程即可
- 定理1:对于多异解
- 定理2:
\color{red}ax\equiv 1\pmod m 有解当且仅当\color{red}a\perp m
乘法逆元
若整数
- 定理:
b\times b^{-1}\equiv 1 \pmod p
费马小定理法: 若
扩展欧几里得法:
线性算法:
首先我们有,
然后设
也就是
再将这个式子放到
然后乘上
因为
因为
所以
模板
\\代码实现
inv[1] = 1;
for(int i = 2; i < p; ++ i)
inv[i] = (p - p / i) * inv[p % i] % p;
BSGS
题单
求
则有
暴力预处理左边与右边,用map记录(或者hash)
int BSGS(int a,int b,int mod)
{
if(a==0&&b) return -1;
if(a==0&&b==0) return 1;
if(b==1) return 0;
map<int,int>hash;
hash.clear();
int sqrtmod=sqrt(mod)+1;
int c=b%mod;
for(int i=0;i<sqrtmod;i++)
{
if(!hash[c]) hash[c]=i+1;
c=mul(c,a,mod)%mod;
}
int d=power(a,sqrtmod,mod),e=d;
for(int i=1;i<=sqrtmod;i++)
{
int ans=hash[e];
if(ans) return i*sqrtmod-(ans-1);
e=mul(e,d,mod)%mod;
}
return -1;
}
数论乱搞题
P2818 天使的起誓