数论笔记
数论
欧几里得算法
利用
\[gcd(x,y) = gcd(y,x\%y)
\]
可得代码
void gcd(int x,int y)
{
return x%y==0?y:gcd(y,x%y);
}
证明很简单,人教B版数学必修三
时间复杂度最大O(log n)
lcm(x,y) * gcd(x,y) = x * y
扩展欧几里得算法
用于求方程ax+by=gcd(a,b) 的一组可行解
\[bx' + (a\% b)y' = gcd(b,a\% b)
\]
\[bx' + (a\% b)y' = gcd(a,b)
\]
\[bx' + (a-a/b*b)y' = gcd(a,b)
\]
\[ay' + b(x' - a/b*y') = gcd(a,b)
\]
即为方程的解
void exgcd(int a,int b,int &x,int &y)
{
if(!b)
{
y = 0;
x = 1;
return;
}
exgcd(b,a%b,y,x);
y-=a/b*x;
}
膜的性质
\[(a + b) \% p = (a\%p + b\%p) \%p
\]
\[(a - b)\%p = (a\%p - b \%p)\%p
\]
\[(a * b)\%p = (a\%p) * (b\%p) \%p
\]
逆元
对于 ∀ 正整数 x 满足 x < p,gcd(x,p) = 1,存在唯一的正整数 inv[x] 满足 inv[x] < p,x ∗ inv[x] ≡ 1( mod p),我们称 inv[x] 为 x 在模 p 意义下的逆元
求逆元
利用费马小定理或扩展gcd
费马小定理:
\[a^{p-1} \equiv 1 (\mod p)
\]
\[\Downarrow
\]
\[a^{p-2}\equiv a^{-1}(\mod p)
\]
所以a模p意义下的逆元是a的p-2次方模p
利用快速幂,时间复杂度达到O(log n)
long long qpow(long long a,long long p,long long mod)
{
long long ans;
if(p==1) return m % mod;
ans = qpow(a,p>>1) % mod;
if(!n%2)
return ans * ans % mod;
else
return m * ans * ans % mod;
}
扩展gcd
求逆元转化成ax-my = 1
所以可以用扩展gcd
代码在上面
二元一次不定方程
形如ax + by = c 的方程,求x,y的整数解
若c不能被gcd(a,b)整除,方程无解
基于扩展gcd求解
原方程的一组解为
\[x_2 = x_1\frac {c}{gcd(a,b)},y_2 = y_1\frac{c}{gcd(a,b)}
\]
原方程的解集为
\[\{ (x,y)|x = x_2 + \frac{b}{gcd(a,b)},y = y_2 - \frac{a}{gcd(a,b)} \}
\]
中国剩余定理
同余方程组
形如
\[\begin{cases}
x \equiv a_1(\mod m_1)\\
x\equiv a_2(\mod m_2)\\
\vdots\\
x \equiv a_n(\mod m_n)
\end{cases}
\]
的方程叫做同余方程组
若x0为方程组的一个最小非负整数解,则解集为
\[\{ x| x=x_0 + k * lcm(m_1,m_2\cdots m_n)\}
\]
因为方程组的两个非负整数解的差一定为 lcm(m 1 ,m 2 ...m n ) 的整数倍
且 x 0 + k ∗ lcm(m 1 ,m 2 ....m n ) 一定为方程组的解
中国剩余定理
中国剩余定理解决m1,m2……mn互质时的同余方程组
posted on 2018-07-28 07:50 Ch_someone 阅读(233) 评论(0) 编辑 收藏 举报