数论基础
质数
质数这东西让我联想到了原子,一样不可拆分,所以我们说质数具有原子性。
我们设 π ( x ) \pi(x) π(x)为不大于x的质数个数,可得 π ( x ) = O ( x ln ( x ) ) \pi(x)=O(\frac x{\ln(x)}) π(x)=O(ln(x)x)。
唯一分解定理
任何一个 N ( N > 1 ) N(N>1) N(N>1)能被质数分解,且只有一种分解方式,即
N = p 1 c 1 × p 2 c 2 × … … × p m c m ( N > 1 ) N=p_1^{c_1}\times p_2^{c_2}\times……\times p_m^{c_m}(N>1) N=p1c1×p2c2×……×pmcm(N>1)
其中 p i p_i pi为素数, c i c_i ci为正整数,满足 p 1 < p 2 < … … < p m p_1<p_2<……<p_m p1<p2<……<pm。
筛质数
可得:对于n,最多只有一个质因子大于 n \sqrt n n。
证明:若两个质因子 a > n , b > n a>\sqrt n,b>\sqrt n a>n,b>n。
~~~~~~~~~~ 则 a × b > n a\times b>n a×b>n(不成立),即原命题正确。
暴力试除法
根据上述结论我们对于一个数,只需要枚举 1 1 1~ n \sqrt n n即可,这里就不给代码了,时间复杂度 O ( n n ) O(n\sqrt n) O(nn)。
埃式筛法
枚举到一个质数,我们只需要将它的倍数全部标记即可,没被标记的就是质数,这里给出核心代码。
int prime[100005],flag[100005],tot;
void find(int n)
{
for(int i=2;i<=n;i++)
if(!flag[i])
{
flag[i]=1;
prime[++tot]=i;
for(int j=2;j<=n/i;j++)
flag[i*j]=1;
}
for(int i=1;i<=tot;i++)
printf("%d ",prime[i]);
}
欧拉筛法(线性筛法)
埃式筛法已经接近 O ( n ) O(n) O(n)的复杂度了,但是优化的余地。
对于一个数,可能被多次标记,我们可以减少它们的次数,来达到优化的目的。
例如:30,它可以被分解成:
30 = 2 × 15 = 3 × 10 = 5 × 6 30=2\times15=3\times10=5\times6 30=2×15=3×10=5×6。
根据上述的唯一分解定理,我们只需要用最小的质因子来分解。
例如: 30 30 30分解成 30 = 2 × 15 30=2\times15 30=2×15。
int prime[100005],flag[100005],tot;
void find(int n)
{
for(int i=2;i<=n;i++)
{
if(!flag[i]) prime[++tot]=i;
for(int j=1;j<=tot&&prime[j]*i<=n;j++)
{
flag[i*prime[j]]=1;
if(i%prime[j]==0) break;
}
}
for(int i=1;i<=tot;i++)
printf("%d ",prime[i]);
}
整除
令 a ∣ b a|b a∣b表示a整除b,其中b是a的倍数,a是b的约数。
一些性质
1、若 d ∣ a d|a d∣a,有 d ∣ k a d|ka d∣ka。
2、对称性:若 a ∣ b , b ∣ a a|b,b|a a∣b,b∣a,有 a = b a=b a=b。
3、传递性:若 c ∣ b , b ∣ a c|b,b|a c∣b,b∣a,则 c ∣ a c|a c∣a。
4、若 c ∣ a , d ∣ b c|a,d|b c∣a,d∣b,则 c d ∣ a b cd|ab cd∣ab。
5、若 c ∣ a , c ∣ b c|a,c|b c∣a,c∣b,则 c ∣ ( m a + n b ) 。 c|(ma+nb)。 c∣(ma+nb)。
约数
若 N = p 1 c 1 × p 2 c 2 × … … × p m c m ( N > 1 ) N=p_1^{c_1}\times p_2^{c_2}\times……\times p_m^{c_m}(N>1) N=p1c1×p2c2×……×pmcm(N>1)
其中 p i p_i pi为素数, c i c_i ci为正整数,满足 p 1 < p 2 < … … < p m p_1<p_2<……<p_m p1<p2<……<pm,
则 N N N的正约数集合 { p 1 b 1 , p 2 b 2 , … … , p m b m } \{p_1^{b_1},p_2^{b_2},……,p_m^{b_m}\} {
p1b1,p2b2,……,pmbm},其中 0 ≤ b i ≤ c i 0\le b_i\le c_i 0≤bi≤ci
由此可推出如下两条公式:
1、 N N N的约数个数: ∏ i = 1 m c i + 1 \prod^m_{i=1}c_i+1 ∏i=1mci+1。
2、 N N N的约数的和: ∏ i = 1 m ( ∑ j = 0 c j ( p i ) j ) \prod_{i=1}^m(\sum^{c_j}_{j=0}(p_i)^j) ∏i=1m(∑j=0cj(pi)j)。
最大公约数和最小公倍数
我们设 g c d ( a , b ) gcd(a,b) gcd(a,b)为 a 、 b a、b a、b的最大公约数。
l c m ( a , b ) ~~~~~~~~~~lcm(a,b) lcm(a,b)为 a 、 b a、b a、b的最下公倍数。
一些性质
1、若 a ∣ m , b ∣ m a|m,b|m a∣m,b∣m,则 l c m ( a , b ) ∣ m lcm(a,b)|m lcm(a,b)∣m。
2、若 d ∣ a , d ∣ b d|a,d|b d∣a,d∣b,则 d ∣ g c d ( a , b ) d|gcd(a,b) d∣gcd(a,b)。
3、正整数m,a,b,有 l c m ( m a , m b ) = m × l c m ( a , b ) lcm(ma,mb)=m\times lcm(a,b) lcm(ma,mb)=m×lcm(a,b)
4、 a × b = g c d ( a , b ) × l c m ( a , b ) a\times b=gcd(a,b)\times lcm(a,b) a×b=gcd(a,b)×lcm(a,b)。
求 l c m ( a , b ) lcm(a,b) lcm(a,b)和 g c d ( a , b ) gcd(a,b) gcd(a,b)
interesting的方法
将a,b分解质因数,得:
a = p 1 a 1 × p 2 a 2 × … … × p m a m a=p_1^{a_1}\times p_2^{a_2}\times……\times p_m^{a_m} a=p1a1×p2a2×……×pmam
b = p 1 b 1 × p 2 b 2 × … … × p m b m b=p_1^{b_1}\times p_2^{b_2}\times……\times p_m^{b_m} b=p1b1×p2b2×……×pmbm
那么 g c d ( a , b ) = p 1 m i n ( a 1 , b 1 ) × p 2 m i n ( a 2 , b 2 ) × … … × p m m i n ( a m , b m ) gcd(a,b)=p_1^{min(a_1,b_1)}\times p_2^{min(a_2,b_2)}\times……\times p_m^{min(a_m,b_m)} gcd(a,b)=p1min(a1,b1)×p2min(a2,b2)×……×pmmin(am,bm)
l c m ( a , b ) = p 1 m a x ( a 1 , b 1 ) × p 2 m a x ( a 2 , b 2 ) × … … × p m m a x ( a m , b m ) ~~~~~lcm(a,b)=p_1^{max(a_1,b_1)}\times p_2^{max(a_2,b_2)}\times……\times p_m^{max(a_m,b_m)} lcm(a,b)=p1max(a1,b1)×p2max(a2,b2)×……×pmmax(am,bm)
欧几里得算法
g c d ( a , b ) = g c d ( b , a m o d b ) gcd(a,b)=gcd(b,a\bmod b) gcd(a,b)=gcd(b,amodb)。
我们可以根据这个求出 g c d ( a , b ) gcd(a,b) gcd(a,b)。
更相减损法
g c d ( a , b ) = g c d ( b , a − b ) = g c d ( a , a − b ) gcd(a,b)=gcd(b,a-b)=gcd(a,a-b) gcd(a,b)=gcd(b,a−b)=gcd(a,a−b)。
g c d ( 2 a , 2 b ) = 2 g c d ( a , b ) gcd(2a,2b)=2gcd(a,b) gcd(2a,2b)=2gcd(a,b)。
根据上述可得 g c d ( a , b ) gcd(a,b) gcd(a,b)。
互质
g c d ( a , b ) = 1 gcd(a,b)=1 gcd(a,b)=1:a,b互质。
g c d ( a , b , c ) = 1 gcd(a,b,c)=1 gcd(a,b,c)=1:a,b,c互质。
g c d ( a , b ) = g c d ( b , c ) = g c d ( a , c ) = 1 gcd(a,b)=gcd(b,c)=gcd(a,c)=1 gcd(a,b)=gcd(b,c)=gcd(a,c)=1:三者两两互质。
欧拉函数
欧拉函数 φ ( n ) \varphi(n) φ(n),表示 1 1 1~ n n n中与n互质的个数。
若 N = p 1 c 1 × p 2 c 2 × … … × p m c m N=p_1^{c_1}\times p_2^{c_2}\times……\times p_m^{c_m} N=p1c1×p2c2×……×pmcm,
其中 p i p_i pi为素数, c i c_i ci为正整数,满足 p 1 < p 2 < … … < p m p_1<p_2<……<p_m p1<p2<……<pm,
φ ( n ) = N × p 1 − 1 p 1 × p 2 − 1 p 2 × … … × p m − 1 p m = N × ∏ ( 1 − 1 p ) \varphi(n)=N\times \frac{p_1-1}{p_1} \times \frac{p_2-1}{p_2}\times……\times\frac{p_m-1}{p_m}=N\times \prod(1-\frac1p) φ(n)=N×p1p1−1×p2p2−1×……×pmpm−1=N×∏(1−p1)
一些性质
1、 φ ( 1 ) = 1 \varphi(1)=1 φ(1)=1。
2、p是质数, φ ( p ) = p − 1 \varphi(p)=p-1 φ(p)=p−1。
3、p是质数, n = p k , φ ( n ) = p k − p k − 1 = ( p − 1 ) p k − 1 n=p^k,\varphi(n)=p^k-p^{k-1}=(p-1)p^{k-1} n=pk,φ(n)=pk−pk−1=(p−1)pk−1。
4、 g c d ( a , b ) = 1 , φ ( a b ) = φ ( a ) × φ ( b ) gcd(a,b)=1,\varphi(ab)=\varphi(a)\times\varphi(b) gcd(a,b)=1,φ(ab)=φ(a)×φ(b)(积性函数)。
5、对于质数p,有
n % p = 0 , φ ( n p ) = φ ( n ) × p ~~~~~n\%p=0,\varphi(np)=\varphi(n)\times p n%p=0,φ(np)=φ(n)×p。
n % p ≠ 0 , φ ( n p ) = φ ( n ) × ( p − 1 ) = φ ( n ) × φ ( p ) ~~~~~n\%p\neq0,\varphi(np)=\varphi(n)\times(p-1)=\varphi(n)\times\varphi(p) n%p=0,φ(np)=φ(n)×(p−1)=φ(n)×φ(p)。
6、对于 n > 1 n>1 n>1, 1 − n 1-n 1−n中与n互质的数的和为 n × φ ( n ) 2 n\times\frac{\varphi(n)}2 n×2φ(n)。
7、 ∑ d ∣ n φ ( d ) = n \sum_{d|n}\varphi(d)=n ∑d∣nφ(d)=n。
欧拉筛求欧拉函数
根据上述性质:
每次枚举出一个质数 i i i, p h i i = i − 1 phi_i=i-1 phii=i−1。根据第5个性质,即可推出。
int prime[100005],flag[100005],phi[100005],tot;
void find(int n)
{
phi[1]=1;
for(int i=2;i<=n;i++)
{
if(!flag[i]) prime[++tot]=i,phi[i]=i-1;
for(int j=1;j<=tot&&prime[j]*i<=n;j++)
{
flag[i*prime[j]]=1;
if(i%prime[j]==0)
{
phi[i*prime[j]]=phi[i]*prime[j];
break;
}
else phi[i*prime[j]]=phi[i]*phi[prime[j]];
}
}
for(int i=1;i<=n;i++)
printf("%d ",phi[i]);
}
同余
用m除整数a,b余数相同,称a和b对模m同余,记作 a ≡ b ( m o d m ) a\equiv b\pmod m a≡b(modm)
两个概念:
1、标准剩余系,每个同余系的任意两个整数模m同余。
2、既约剩余系,每个同余系的任意整数与m互质。
一些性质1
1、 a ≡ b ( m o d m ) a\equiv b\pmod m a≡b(modm),当且仅当 m ∣ ( a − b ) m|(a-b) m∣(a−b)。
2、 a ≡ b ( m o d m ) a\equiv b\pmod m a≡b(modm),当且仅当最在整数k,使得 a = b + k m a=b+km a=b+km
一些性质2
有整数a,b,c,自然数m,n
1、自反性: a ≡ a ( m o d m ) a\equiv a\pmod m a≡a(modm)。
2、对称性:若 a ≡ b ( m o d m ) a\equiv b\pmod m a≡b(modm),则 b ≡ a ( m o d m ) b\equiv a\pmod m b≡a(modm)。
3、传递性:
a ≡ b ( m o d m ) , b ≡ c ( m o d m ) , a ≡ c ( m o d m ) a\equiv b\pmod m,b\equiv c\pmod m,a\equiv c\pmod m a≡b(modm),b≡c(modm),a≡c(modm)
4、同加性: a ≡ b ( m o d m ) , a + c ≡ b + c ( m o d m ) a\equiv b\pmod m,a+c\equiv b+c\pmod m a≡b(modm),a+c≡b+c(modm)
5、同乘性: a ≡ b ( m o d m ) , a c ≡ b c ( m o d m ) a\equiv b\pmod m,ac\equiv bc\pmod m a≡b(modm),ac≡bc(modm)
6、同幂性: a ≡ b ( m o d m ) , a n ≡ b n ( m o d m ) a\equiv b\pmod m,a^n\equiv b^n\pmod m a≡b(modm),an≡bn(modm)
7、若 a m o d p = x , a m o d q = x , a m o d ( p q ) = x a \bmod p=x,a\bmod q=x,a\bmod (pq)=x amodp=x,amodq=x,amod(pq)=x。p,q互质。
欧拉定理
若 g c d ( a , n ) = 1 gcd(a,n)=1 gcd(a,n)=1,则 a φ ( n ) ≡ 1 ( m o d n ) a^{\varphi(n)}\equiv1\pmod n aφ(n)≡1(modn)。
证明:设 S 1 = { r 1 , r 2 , … … , r φ ( n ) } S_1=\{r_1,r_2,……,r_{\varphi(n)}\} S1={
r1,r2,……,rφ(n)}为 m o d n \bmod n modn的既约剩余系,
S 2 = { a r 1 , a r 2 , … … , a r φ ( n ) } ~~~~~~~~~~~~S_2=\{ar_1,ar_2,……,ar_{\varphi(n)}\} S2={
ar1,ar2,……,arφ(n)}为 m o d n \bmod n modn的既约剩余系。
∏ i = 1 φ ( n ) a r i ≡ ∏ i = 1 φ ( n ) r i ( m o d n ) ~~~~~~~~~\prod_{i=1}^{\varphi(n)}ar_i\equiv\prod_{i=1}^{\varphi(n)}r_i\pmod n ∏i=1φ(n)ari≡∏i=1φ(n)ri(modn)
a φ ( n ) ∏ i = 1 φ ( n ) r i ≡ ∏ i = 1 φ ( n ) r i ( m o d n ) ~~~~~~~~~a^{\varphi(n)}\prod_{i=1}^{\varphi(n)}r_i\equiv\prod_{i=1}^{\varphi(n)}r_i\pmod n aφ(n)∏i=1φ(n)ri≡∏i=1φ(n)ri(modn)
n ∣ ( a φ ( n ) ∏ i = 1 φ ( n ) r i − ∏ i = 1 φ ( n ) r i ) ~~~~~~~~~n|(a^{\varphi(n)}\prod^{\varphi(n)}_{i=1}r_i-\prod^{\varphi(n)}_{i=1}r_i) n∣(aφ(n)∏i=1φ(n)ri−∏i=1φ(n)ri)
→ n ∣ ( a φ ( n ) − 1 ) × ∏ i = 1 φ ( n ) r i ~~~~~\to n|(a^{\varphi(n)}-1)\times \prod^{\varphi(n)}_{i=1}r_i →n∣(aφ(n)−1)×∏i=1φ(n)ri & g c d ( n , ∏ i = 1 φ ( n ) r i ) = 1 gcd(n,\prod^{\varphi(n)}_{i=1}r_i)=1 gcd(n,∏i=1φ(n)ri)=1
→ n ∣ ( a φ ( n ) − 1 ) ~~~~~\to n|(a^{\varphi(n)}-1) →n∣(aφ(n)−1)
→ a φ ( n ) ≡ 1 ( m o d n ) ~~~~~\to a^{\varphi(n)}\equiv1\pmod n →aφ(n)≡1(modn)。
费马小定理
若p为质数,a为整数,有 a p ≡ a ( m o d p ) a^p\equiv a\pmod p ap≡a(modp)
证明:
1、 g c d ( a , p ) = 1 → a φ ( p ) ≡ 1 ( m o d p ) gcd(a,p)=1\to a^{\varphi(p)}\equiv1\pmod p gcd(a,p)=1→aφ(p)≡1(modp)
~~~~ 得 a p − 1 ≡ 1 ( m o d p ) → a p ≡ a ( m o d p ) a^{p-1}\equiv1\pmod p\to a^p\equiv a\pmod p ap−1≡1(modp)→ap≡a(modp)。
2、 g c d ( a , p ) ≠ 1 gcd(a,p)\neq1 gcd(a,p)=1,即a是p的倍数。
a p % p = 0 , a % p = 0 , a^p\%p=0,a\%p=0, ap%p=0,a%p=0,即 a p ≡ a ( m o d p ) a^p\equiv a\pmod p ap≡a(modp)。
裴蜀定理(贝祖定理)
对于任意整数 a , b a,b a,b,存在一组整数 x , y x,y x,y,满足 a x + b y = g c d ( a , b ) ax+by=gcd(a,b) ax+by=gcd(a,b)
证明:设 d = g c d ( a , b ) d=gcd(a,b) d=gcd(a,b),则 a = d a ′ , b = d b ′ a=da^{'},b=db^{'} a=da′,b=db′
得 a x + b y = d a ′ x + d b ′ y = d ( a ′ x + b ′ y ) = d ax+by=da^{'}x+db^{'}y=d(a^{'}x+b^{'}y)=d ax+by=da′x+db′y=d(a′x+b′y)=d,因为 a ′ , b ′ , x , y a^{'},b^{'},x,y a′,b′,x,y都是整数,所以只有 a x + b y = g c d ( a , b ) ax+by=gcd(a,b) ax+by=gcd(a,b)或是 g c d ( a , b ) gcd(a,b) gcd(a,b)得倍数时有解。
解法:当 b = 0 b=0 b=0,有一组整数解 x = 1 , y = 0 x=1,y=0 x=1,y=0,使得 a × 1 + 0 × 0 = g c d ( a , 0 ) a\times1+0\times0=gcd(a,0) a×1+0×0=gcd(a,0)。
~~~~~~~~~~ 当 b > 0 b>0 b>0, g c d ( a , b ) = g c d ( b , a m o d b ) gcd(a,b)=gcd(b,a\bmod b) gcd(a,b)=gcd(b,amodb),即 a x + b y = b x ′ + ( a m o d b ) y ′ ax+by=bx^{'}+(a\bmod b)y^{'} ax+by=bx′+(amodb)y′,化简得 a x + b y = b x ′ + ( a − b × ⌊ a b ⌋ ) y ′ ax+by=bx^{'}+(a-b\times\lfloor\frac ab\rfloor)y^{'} ax+by=bx′+(a−b×⌊ba⌋)y′
= a y ′ + b ( x ′ − a b y ′ ) =ay^{'}+b(x^{'}-\frac aby^{'}) =ay′+b(x′−bay′),另 x = y ′ , y = x ′ − a b y ′ x=y^{'},y=x^{'}-\frac aby^{'} x=y′,y=x′−bay′。
扩展欧几里得的通解
对于 a x + b y = g c d ( a , b ) ax+by=gcd(a,b) ax+by=gcd(a,b),通过扩欧得出一组通解 x 0 , y 0 x_0,y_0 x0,y0。
得通解: x = x 0 + b ÷ g c d ( a , b ) × t x=x_0+b÷gcd(a,b)\times t x=x0+b÷gcd(a,b)×t
y = y 0 − a ÷ g c d ( a , b ) × t ~~~~~~~~~~~~~y=y_0-a÷gcd(a,b)\times t y=y0−a÷gcd(a,b)×t
最后祝大家GDKOI玩的开心!!!