数论笔记

数论

欧几里得算法

利用
$$
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
$$

扫描二维码关注公众号,回复: 2424414 查看本文章

$$
(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互质时的同余方程组

捕获

猜你喜欢

转载自www.cnblogs.com/Ch-someone/p/9380529.html