:) Ch_someone

Ch_someone

数论笔记

数论

欧几里得算法

利用

\[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编辑  收藏  举报

导航