本
文
主
要
来
自
博
主
高
中
时
数
竞
相
关
积
累
与
网
上
相
关
资
料
(
更
新
中
)
本文主要来自博主高中时数竞相关积累与网上相关资料(更新中)
本 文 主 要 来 自 博 主 高 中 时 数 竞 相 关 积 累 与 网 上 相 关 资 料 ( 更 新 中 )
欧拉函数
欧
拉
函
数
:
小
于
n
的
正
整
数
中
与
n
互
质
的
数
的
数
目
,
φ
(
1
)
=
1
欧拉函数:小于n的正整数中与n互质的数的数目,\varphi(1)=1
欧 拉 函 数 : 小 于 n 的 正 整 数 中 与 n 互 质 的 数 的 数 目 , φ ( 1 ) = 1 ,通式:
φ
(
x
)
=
x
∏
i
=
1
n
(
1
−
1
p
i
)
\varphi(x)=x\displaystyle\prod^n_{i=1}\left(1-\frac{1}{p_i}\right)
φ ( x ) = x i = 1 ∏ n ( 1 − p i 1 )
x
=
p
1
a
1
⋯
p
n
a
n
为
x
的
标
准
分
解
x=p_1^{a_1}\cdots p_n^{a_n}为x的标准分解
x = p 1 a 1 ⋯ p n a n 为 x 的 标 准 分 解
性质:
若
n
是
素
数
,
有
φ
(
n
)
=
n
−
1
若n是素数 , 有\varphi(n)=n−1
若 n 是 素 数 , 有 φ ( n ) = n − 1
n
>
2
,
φ
(
n
)
是
偶
数
n>2,\varphi(n)是偶数
n > 2 , φ ( n ) 是 偶 数
若
a
是
素
数
且
n
不
是
a
倍
数
,
有
φ
(
n
∗
a
)
=
φ
(
n
)
∗
(
a
−
1
)
若a是素数且n不是a倍数 , 有\varphi(n∗a)=\varphi(n)*(a−1)
若 a 是 素 数 且 n 不 是 a 倍 数 , 有 φ ( n ∗ a ) = φ ( n ) ∗ ( a − 1 )
若
a
是
素
数
且
n
m
o
d
a
=
0
,
有
φ
(
n
∗
a
)
=
φ
(
n
)
∗
a
若a是素数且n\ mod\ a=0 , 有\varphi(n∗a)=\varphi(n)∗a
若 a 是 素 数 且 n m o d a = 0 , 有 φ ( n ∗ a ) = φ ( n ) ∗ a
若
g
c
d
(
n
,
m
)
=
1
,
有
φ
(
m
∗
n
)
=
φ
(
m
)
∗
φ
(
n
)
若gcd(n,m)=1 , 有\varphi(m∗n)=\varphi(m)∗\varphi(n)
若 g c d ( n , m ) = 1 , 有 φ ( m ∗ n ) = φ ( m ) ∗ φ ( n )
若
n
是
奇
数
,
有
φ
(
2
∗
n
)
=
φ
(
n
)
若n是奇数 , 有\varphi(2∗n)=\varphi(n)
若 n 是 奇 数 , 有 φ ( 2 ∗ n ) = φ ( n )
若
n
和
m
是
素
数
,
有
φ
(
n
∗
m
)
=
n
∗
m
−
1
若n和m是素数 , 有\varphi(n∗m)=n∗m−1
若 n 和 m 是 素 数 , 有 φ ( n ∗ m ) = n ∗ m − 1
若
p
是
素
数
,
有
φ
(
p
q
)
=
p
q
−
p
q
−
1
若p是素数 , 有\varphi(p^q)=p^q−p^{q−1}
若 p 是 素 数 , 有 φ ( p q ) = p q − p q − 1
∑
d
∣
m
φ
(
d
)
=
m
d
为
m
的
所
有
正
约
数
\displaystyle\sum_{d|m}\varphi(d)=m\quad d为m的所有正约数
d ∣ m ∑ φ ( d ) = m d 为 m 的 所 有 正 约 数
#include <cstring>
#define ll long long
const int MAX_N = 1e6 + 5 ;
ll phi[ MAX_N] ;
bool isprime[ MAX_N] ;
void Euler ( )
{
for ( int i = 0 ; i < MAX_N; ++ i) phi[ i] = i;
memset ( isprime, true , sizeof ( isprime) ) ;
isprime[ 0 ] = isprime[ 1 ] = false ;
phi[ 1 ] = 1 ;
for ( int i = 2 ; i <= MAX_N; ++ i) {
if ( isprime[ i] )
for ( int j = i; j <= MAX_N; j + = i) {
isprime[ j] = false ;
phi[ j] - = phi[ j] / i;
}
}
}
void Euler ( )
{
for ( int i = 1 ; i < MAX_N; ++ i) phi[ i] = i;
for ( int i = 2 ; i < MAX_N; ++ i)
if ( phi[ i] == i)
for ( int j = i; j < MAX_N; j+ = i)
phi[ j] = ( i - 1 ) * phi[ j] / i;
}
ll phi ( ll n)
{
int ans = n;
for ( int i = 2 ; i * i <= x; ++ i) {
if ( x % i == 0 ) {
ans - = ans / i;
while ( x % i == 0 ) x / = i;
}
}
if ( x > 1 ) ans - = ans / x;
return ans;
}
著名数论定理
欧拉定理
设
g
c
d
(
a
,
m
)
=
1
,
则
a
φ
(
m
)
≡
1
(
m
o
d
m
)
设gcd(a,m)=1,则a^{\varphi(m)}\equiv1(mod\ m)
设 g c d ( a , m ) = 1 , 则 a φ ( m ) ≡ 1 ( m o d m )
费马小定理
设
p
是
素
数
,
p
∤
a
,
则
a
p
−
1
≡
1
(
m
o
d
p
)
设p是素数,p\nmid a,则a^{p-1}\equiv1(mod\ p)
设 p 是 素 数 , p ∤ a , 则 a p − 1 ≡ 1 ( m o d p )
威尔逊定理
设
p
是
素
数
,
则
(
p
−
1
)
!
≡
−
1
(
m
o
d
p
)
设p是素数,则\left(p-1\right)!\equiv-1(mod\ p)
设 p 是 素 数 , 则 ( p − 1 ) ! ≡ − 1 ( m o d p )
中国剩余定理
对
于
两
两
互
质
的
m
i
,
同
余
方
程
组
{
x
≡
r
1
(
m
o
d
m
1
)
x
≡
r
2
(
m
o
d
m
2
)
⋮
x
≡
r
n
(
m
o
d
m
n
)
的
解
为
x
≡
∑
i
=
1
n
r
i
M
i
M
i
‘
,
其
中
M
=
∏
i
=
1
n
m
i
,
M
i
=
M
m
i
,
M
i
‘
=
M
i
−
1
(
m
o
d
m
i
)
对于两两互质的m_i,同余方程组\begin{cases} x\equiv r_1\quad(mod\ m_1)\\ x\equiv r_2\quad(mod\ m_2)\\ \vdots\\ x\equiv r_n\quad(mod\ m_n) \end{cases}的解为\\ x\equiv\sum_{i=1}^nr_iM_iM_i^`,其中M=\prod_{i=1}^nm_i,M_i=\frac{M}{m_i},M_i^`=M_i^{-1}\ (mod\ m_i)
对 于 两 两 互 质 的 m i , 同 余 方 程 组 ⎩ ⎪ ⎪ ⎪ ⎪ ⎨ ⎪ ⎪ ⎪ ⎪ ⎧ x ≡ r 1 ( m o d m 1 ) x ≡ r 2 ( m o d m 2 ) ⋮ x ≡ r n ( m o d m n ) 的 解 为 x ≡ i = 1 ∑ n r i M i M i ‘ , 其 中 M = i = 1 ∏ n m i , M i = m i M , M i ‘ = M i − 1 ( m o d m i )
同余
g
c
d
(
a
,
b
)
=
g
c
d
(
a
,
b
−
a
)
=
g
c
d
(
a
,
b
m
o
d
a
)
gcd(a,b)=gcd(a,b-a)=gcd(a,b\ mod\ a)
g c d ( a , b ) = g c d ( a , b − a ) = g c d ( a , b m o d a )
a
⋅
b
=
g
c
d
(
a
,
b
)
⋅
l
c
m
(
a
,
b
)
a\cdot b=gcd(a,b)\cdot lcm(a,b)
a ⋅ b = g c d ( a , b ) ⋅ l c m ( a , b )
扩
展
欧
几
里
得
算
法
:
扩展欧几里得算法:
扩 展 欧 几 里 得 算 法 :
素数
素
数
筛
(
粗
略
)
素数筛(粗略)
素 数 筛 ( 粗 略 )
#include <cstdio>
#include <cstring>
#define ll long long
const int MAX_N = 1e5 ;
ll prime[ MAX_N] , cnt;
bool isprime[ MAX_N] ;
void sieve ( )
{
cnt = 1 ;
memset ( isprime, true , sizeof ( isprime) ) ;
isprime[ 0 ] = isprime[ 1 ] = false ;
for ( ll i = 2 ; i <= MAX_N; ++ i) {
if ( isprime[ i] ) {
prime[ cnt++ ] = i;
for ( ll j = 2 * i; j <= MAX_N; j + = i)
isprime[ j] = false ;
}
}
}
int main ( )
{
sieve ( ) ;
for ( ll i = 1 ; i < cnt; ++ i)
printf ( "%15d" , prime[ i] ) ;
return 0 ;
}
const int MAX_N = 1e5 ;
int prime[ MAX_N] , cnt;
bool check[ MAX_N] ;
void sieve ( ) {
for ( int i = 2 ; i <= MAX_N; ++ i) {
if ( ! check[ i] ) prime[ ++ cnt] = i;
for ( int j = 1 ; j <= cnt && prime[ j] * i <= MAX_N; ++ j) {
check[ prime[ j] * i] = true ;
if ( i % prime[ j] == 0 ) break ;
}
}
}
数论计数问题
约
数
:
对
n
的
标
准
分
解
式
n
=
p
1
a
1
⋯
p
n
a
n
,
n
的
正
约
数
个
数
为
∏
i
=
1
n
(
a
i
+
1
)
约数:对n的标准分解式n=p_1^{a_1}\cdots p_n^{a_n},n的正约数个数为\displaystyle\prod_{i=1}^n(a_i+1)
约 数 : 对 n 的 标 准 分 解 式 n = p 1 a 1 ⋯ p n a n , n 的 正 约 数 个 数 为 i = 1 ∏ n ( a i + 1 )
勒
让
德
定
理
:
在
正
数
n
!
的
素
因
子
标
准
分
解
式
中
,
素
数
p
的
最
高
指
数
为
(
n
!
)
=
∑
m
=
1
∞
[
n
p
m
]
勒让德定理:在正数n!的素因子标准分解式中,素数p的最高指数为(n!)=\displaystyle\sum_{m=1}^\infty\left[\frac{n}{p^m}\right]
勒 让 德 定 理 : 在 正 数 n ! 的 素 因 子 标 准 分 解 式 中 , 素 数 p 的 最 高 指 数 为 ( n ! ) = m = 1 ∑ ∞ [ p m n ]
根
据
勒
让
德
定
理
计
算
C
n
k
m
o
d
p
根据勒让德定理计算C_n^k\ mod\ p
根 据 勒 让 德 定 理 计 算 C n k m o d p