包括了离散数学、线性代数方面的一些基础知识。
质数
对于一个足够大的整数 N N N ,不超过 N N N 的质数大约有 N / l n N N/lnN N / l n N 个,即每l n N lnN l n N 个数中有一个质数
质数的判定
使用试除法判定质数,显然,对于一个合数 N N N ,存在一个 [ 2 , N ] [2, \sqrt{N}] [ 2 , N ] 之间的数可以整除 N N N 。
1 2 3 4 5 6 7 8 9 bool is_prime (int n) { if (n < 2 ) return false ; for (int i = 2 ; i * i <= n; i++) if (n % i == 0 ) return false ; return true ; }
筛质数
Eratosthenes筛法
任意整数 x x x 的倍数 2 x , 3 x ⋅ ⋅ ⋅ 2x,3x··· 2 x , 3 x ⋅ ⋅ ⋅ 都不是质数。
从 2 开始,从大到小扫描每个数 x x x ,将 2 x , 3 x , ⋅ ⋅ ⋅ , [ N / x ] × x 2x,3x,···,[N/x]\times x 2 x , 3 x , ⋅ ⋅ ⋅ , [ N / x ] × x 标记为合数。若扫描到一个数未被标记时,则该数为质数。若已被标记,显然其倍数也被标记了其本身的质数标记,故不需要标记其倍数。
同时,显然,对于一个数 x x x 的一对约数 a , b ( 1 < a < b , a × b = x ) a,b\ (1<a<b, a\times b = x) a , b ( 1 < a < b , a × b = x ) ,其必定首先被 a a a 标记,故我们不需要在扫描 b b b 时标记 x x x 。这一情况对于 x ∈ [ 2 b , ⋅ ⋅ ⋅ ( b − 1 ) b ] x \in [2b, ··· (b-1)b] x ∈ [ 2 b , ⋅ ⋅ ⋅ ( b − 1 ) b ] 都适用,所以在标记时,直接从 b 2 b^2 b 2 开始标记即可。
该筛法的时间复杂度为 O ( n l o g l o g n ) O(nloglogn) O ( n l o g l o g n ) 。
1 2 3 4 5 6 7 8 9 10 11 12 bool st[N];void primes (int n) { memset (st, 0 , sizeof (st)); for (int i = 2 ; i <= n; i++) { if (st[i]) continue ; for (int j = i; j * i <= n; j++) st[i*j] = true ; } }
线性筛法
线性筛法通过“从小到大积累质因子”的方法标记每个合数,即让 12 只有 6*2 一种产生方式。设 线性筛法如下:
依次考虑 2 ∼ N 2\sim N 2 ∼ N 之间的每个数 i i i 。
若未被标记,则为质数
扫描所有质数。当扫描到第一个质数 p i p_i p i 满足 i m o d p i = 0 i \ mod\ p_i = 0 i m o d p i = 0 时,说明 p i p_i p i 是 i 的最小质因子,跳出循环。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 bool st[N];int prime[N], m = 0 ;void primes (int n) { for (int i = 2 ; i <= n; i++) { if (!st[i]) prime[m++] = i; for (int j = 0 ; j < m && prime[j] * i <= n; j++) { st[prime[j] * i] = true ; if (i % prime[j] == 0 ) break ; } } }
质因数分解
算术基本定理
任意一个大于 1 的正整数都能唯一分解为有限个质数的乘积,可写作:
N = p 1 c 1 p 2 c 2 ⋅ ⋅ ⋅ p m c m N=p_1^{c_1}p_2^{c_2}···p_m^{c_m}
N = p 1 c 1 p 2 c 2 ⋅ ⋅ ⋅ p m c m
其中 c i c_i c i 都是正整数,p i p_i p i 都是质数,且满足 p 1 < p 2 < ⋅ ⋅ ⋅ < p m p_1<p_2<···<p_m p 1 < p 2 < ⋅ ⋅ ⋅ < p m 。
试除法
扫描 2 ∼ ⌊ N ⌋ 2\sim \lfloor\sqrt{N}\rfloor 2 ∼ ⌊ N ⌋ 的每个数 d d d ,若 d d d 能整除 N N N ,则从 N N N 中除掉所有的因子 d d d ,同时累加计算 d d d 的个数。
因为一个合数因子一定在扫描到这个合数之间就被除掉了,所以所有 d d d 一定是质数。最终得到了质因数分解的结果,时间复杂度为 O ( N ) O(\sqrt{N}) O ( N ) 。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 int p[N], c[N], m = 0 ;void divide (int n) { for (int i = 2 ; i * i <= n; i++) { if (n % i == 0 ) { p[++m] = i, c[m] = 0 ; while (n % i == 0 ) n /= i, c[m]++; } } if (n > 1 ) p[++m] = n, c[m] = 1 ; }
约数
若 d d d 能整除 n n n ,称 d d d 为 n n n 的约数,记为 d ∣ n d|n d ∣ n 。
算术基本定理的推论
在算术基本定理中,若正整数 N N N 被唯一分解为 N = p 1 c 1 p 2 c 2 ⋅ ⋅ ⋅ p m c m N=p_1^{c_1}p_2^{c_2}···p_m^{c_m} N = p 1 c 1 p 2 c 2 ⋅ ⋅ ⋅ p m c m ,其中 c i c_i c i 都是正整数,p i p_i p i 都是正数,且满足 p 1 < p 2 < ⋅ ⋅ ⋅ < p m p_1<p_2<···<p_m p 1 < p 2 < ⋅ ⋅ ⋅ < p m ,则 N N N 的正约数集合可写作:
{ p 1 b 1 p 2 b 2 ⋅ ⋅ ⋅ p m b m } ,其中 0 ≤ b i ≤ c i \{p_1^{b_1}p_2^{b_2}···p_m^{b_m}\},其中 0\le b_i\le c_i
{ p 1 b 1 p 2 b 2 ⋅ ⋅ ⋅ p m b m } , 其 中 0 ≤ b i ≤ c i
N N N 的正约数个数为:
( c 1 + 1 ) × ( c 1 + 1 ) × ⋅ ⋅ ⋅ × ( c m + m ) = ∏ i = 1 m ( c i + 1 ) (c_1+1)\times(c_1+1)\times···\times(c_m+m)=\prod_{i=1}^m(c_i+1)
( c 1 + 1 ) × ( c 1 + 1 ) × ⋅ ⋅ ⋅ × ( c m + m ) = i = 1 ∏ m ( c i + 1 )
N N N 的所有正约数的和为:
( 1 + p 1 + p 1 2 + ⋅ ⋅ ⋅ + p 1 c 1 ) × ⋅ ⋅ ⋅ × ( 1 + p m + p m 2 + ⋅ ⋅ ⋅ + p m c m ) = ∏ i = 1 m ( ∑ j = 0 c i ( p i ) j ) (1+p_1+p_1^2+···+p_1^{c_1})\times ···\times(1+p_m+p_m^2+···+p_m^{c_m})=\prod_{i=1}^m(\sum_{j=0}^{c_i}(p_i)^j)
( 1 + p 1 + p 1 2 + ⋅ ⋅ ⋅ + p 1 c 1 ) × ⋅ ⋅ ⋅ × ( 1 + p m + p m 2 + ⋅ ⋅ ⋅ + p m c m ) = i = 1 ∏ m ( j = 0 ∑ c i ( p i ) j )
求 N 的正约数集合:试除法
显然,除完全平方数之外的约数成对出现,且在 N \sqrt{N} N 两侧。故枚举 d = 1 ∼ N d=1\sim \sqrt{N} d = 1 ∼ N 即可。
1 2 3 4 5 6 7 8 9 10 int factor[N], m = 0 ;for (int i = 1 ; i * i <= n; i++){ if (n % i == 0 ) { factor[++m] = i; if (i != n / i) factor[++m] = n / i; } }
推论
一个整数 N N N 的约数个数上界为 2 N 2\sqrt{N} 2 N 。
求 1∼N 每个数的正约数集合——倍数法
对于每个数 d d d ,1 ∼ N 1\sim N 1 ∼ N 中以 d d d 为约数的数就是 d d d 的倍数,d , 2 d , 3 d , ⋅ ⋅ ⋅ , ⌊ N / d ⌋ ∗ d d,2d,3d,···,\lfloor N/d\rfloor *d d , 2 d , 3 d , ⋅ ⋅ ⋅ , ⌊ N / d ⌋ ∗ d 。
1 2 3 4 vector<int > factor[N]; for (int i = 1 ; i <= n; i++) for (int j = 1 ; i * j <= n; j++) factor[i*j].push_back (i);
最大公约数
定义
若自然数 d d d 同时是自然数 a a a 和 b b b 的约数,则称 d d d 是 a a a 和 b b b 的公约数。在所有 a a a 和 b b b 的公约数中最大的一个,称为 a a a 和 b b b 的最大公约数,记为 g c d ( a , b ) gcd(a,b) g c d ( a , b ) 。
若自然数 d d d 同时是自然数 a a a 和 b b b 的倍数,则称 d d d 是 a a a 和 b b b 的公倍数。在所有 a a a 和 b b b 的公倍数中最大的一个,称为 a a a 和 b b b 的最大公倍数,记为 l c m ( a , b ) lcm(a,b) l c m ( a , b ) 。
定理
∀ a , b ∈ N , g c d ( a , b ) ∗ l c m ( a , b ) = a ∗ b \forall a, b \in \mathbb{N},\ gcd(a,b)*lcm(a,b)=a*b
∀ a , b ∈ N , g c d ( a , b ) ∗ l c m ( a , b ) = a ∗ b
欧几里得算法
∀ a , b ∈ N , g c d ( a , b ) = g c d ( b , a m o d b ) \forall a,b \in \mathbb{N},\ gcd(a,b)=gcd(b,a \ mod \ b)
∀ a , b ∈ N , g c d ( a , b ) = g c d ( b , a m o d b )
1 2 3 4 int gcd (int a, int b) { return b ? gcd (b, a % b) : a; }
时间复杂度约为 O ( l o g ( a + b ) ) O(log(a+b)) O ( l o g ( a + b ) ) 。
互质与欧拉函数
定义
∀ a , b ∈ N \forall a,b\in \mathbb{N} ∀ a , b ∈ N ,若 g c d ( a , b ) = 1 gcd(a,b)=1 g c d ( a , b ) = 1 ,则称 a a a ,b b b 互质。
欧拉函数
1 ∼ N 1\sim N 1 ∼ N 中与 N N N 互质的数的个数被称为欧拉函数,记为 φ ( N ) \varphi(N) φ ( N ) 。若在算术基本定理中,N = p 1 c 1 p 2 c 2 ⋅ ⋅ ⋅ p m c m N=p_1^{c_1}p_2^{c_2}···p_m^{c_m} N = p 1 c 1 p 2 c 2 ⋅ ⋅ ⋅ p m c m ,则:
φ ( N ) = N ∗ p 1 − 1 p 1 ∗ p 2 − 1 p 2 ∗ ⋅ ⋅ ⋅ ∗ p m − 1 p m = N ∗ ∏ 质数 p ∣ N ( 1 − 1 p ) \varphi(N)=N*\cfrac{p_1-1}{p_1}*\cfrac{p_2-1}{p_2}*···*\cfrac{p_m-1}{p_m}=N*\prod_{质数p|N}(1-\cfrac{1}{p})
φ ( N ) = N ∗ p 1 p 1 − 1 ∗ p 2 p 2 − 1 ∗ ⋅ ⋅ ⋅ ∗ p m p m − 1 = N ∗ 质 数 p ∣ N ∏ ( 1 − p 1 )
推论
∀ n > 1 , 1 ∼ n \forall n>1,1\sim n ∀ n > 1 , 1 ∼ n 中与 n n n 互质的数的和为 n ∗ φ ( n ) / 2 n*\varphi(n)/2 n ∗ φ ( n ) / 2 。
若 a , b a,b a , b 互质,则 φ ( a b ) = φ ( a ) φ ( b ) \varphi(ab)=\varphi(a)\varphi(b) φ ( a b ) = φ ( a ) φ ( b ) 。
设 p p p 为质数,若 p ∣ n p\mid n p ∣ n 且 p 2 ∣ n p^2\mid n p 2 ∣ n ,则 φ ( n ) = φ ( n / p ) ∗ p \varphi(n)=\varphi(n/p)*p φ ( n ) = φ ( n / p ) ∗ p 。
设 p p p 为质数,若 p ∣ n p\mid n p ∣ n 但 p 2 ∤ n p^2\nmid n p 2 ∤ n ,则 φ ( n ) = φ ( n / p ) ∗ ( p − 1 ) \varphi(n)=\varphi(n/p)*(p-1) φ ( n ) = φ ( n / p ) ∗ ( p − 1 ) 。
∑ d ∣ n φ ( d ) = n \sum_{d\mid n}\varphi(d)=n ∑ d ∣ n φ ( d ) = n 。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 int phi (int n) { int ans = n; for (int i = 2 ; i <= sqrt (n); i++) if (n % i == 0 ) { ans = ans / i * (i - 1 ); while (n % i == 0 ) n /= i; } if (n > 1 ) ans / n * (n - 1 ); return ans; }
1 2 3 4 5 6 7 8 9 10 11 int phi[N];void eular (int n) { for (int i = 2 ; i <= n; i++) phi[i] = i; for (int i = 2 ; i <= n; i++) if (phi[i] == i) for (int j = i; j <= n; j++) phi[j] = phi[j] / i * (i - 1 ); }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 bool st[N];int pri[N / 10 ], tot = 0 ;int phi[N];void eular (int n) { for (int i = 2 ; i <= n; i++) { if (!st[i]) pri[++tot] = i, phi[i] = i - 1 ; for (int j = 1 ; j <= tot && pri[j] * i <= n; j++) { int v = pri[j] * i; st[v] = true ; if (i % pri[j] == 0 ) { phi[v] = phi[i] * pri[j]; break ; } else phi[v] = phi[i] * (pri[j] - 1 ); } } }
同余
定义
若整数 a a a 和整数 b b b 除以正整数 m m m 的余数相等,则称 a a a ,b b b 模 m m m 同余,记为 a ≡ b ( m o d m ) a\equiv b\ (mod \ m) a ≡ b ( m o d m ) 。
同余类与剩余系
对于 ∀ a ∈ [ 0 , m − 1 ] \forall a\in[0,m-1] ∀ a ∈ [ 0 , m − 1 ] ,集合 { a + k m } ( k ∈ Z ) \{a+km\}(k\in\mathbb{Z}) { a + k m } ( k ∈ Z ) 的所有数模 m m m 同余,余数都是 a a a 。该集合称为一个模 m m m 的同余类,简记为 a ‾ \overline{a} a 。
模 m m m 的同余类一共有 m m m 个,分别为 0 ‾ , 1 ‾ , 2 ‾ , ⋅ ⋅ ⋅ , m − 1 ‾ \overline{0},\overline{1},\overline{2},···,\overline{m-1} 0 , 1 , 2 , ⋅ ⋅ ⋅ , m − 1 。它们构成 m m m 的完全剩余系。
1 ∼ m 1\sim m 1 ∼ m 中与 m m m 互质的数代表的同余类共有 φ ( m ) \varphi(m) φ ( m ) ,他们构成 m m m 的完全剩余系。
1 ∼ m 1\sim m 1 ∼ m 中与 m m m 互质的数代表的同余类共有 φ ( m ) \varphi(m) φ ( m ) 个,它们构成 m m m 的简化剩余系,例如,模 10 10 1 0 的简化剩余系为 { 1 ‾ , 3 ‾ , 7 ‾ , 9 ‾ } \{\overline{1},\overline{3},\overline{7},\overline{9}\} { 1 , 3 , 7 , 9 } 。简化剩余系关于模 m m m 乘法封闭。
费马小定理
若 p p p 是质数,则对于任意整数 a a a ,有 a p ≡ a ( m o d p ) a^p\equiv a \ (mod\ p) a p ≡ a ( m o d p ) 。
欧拉定理
若正整数 a , n a,n a , n 互质,则 a φ ( n ) ≡ 1 ( m o d n ) a^{\varphi(n)}\equiv 1 \ (mod\ n) a φ ( n ) ≡ 1 ( m o d n ) ,其中 φ ( n ) \varphi(n) φ ( n ) 为欧拉函数。
欧拉定理的推论
若正整数 a , n a,n a , n 互质,则对于任意正整数 b b b ,有 a b ≡ a b m o d φ ( n ) ( m o d n ) a^b\equiv a^{b\ mod\ \varphi(n)}(mod\ n) a b ≡ a b m o d φ ( n ) ( m o d n ) 。
扩展欧几里得算法
Bézout定理
对于任意整数 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) a x + b y = g c d ( a , b ) 。
1 2 3 4 5 6 7 8 9 10 11 12 13 int exgcd (int a, int b, int &x, int &y) { if (b == 0 ) { x = 1 , y = 0 ; return a; } int d = exgcd (b, a % b, x, y); int z = x; x = y; y = z - y * (a / b); return d; }
对于更为一般的方程 a x + b y = c ax+by=c a x + b y = c ,当且仅当 g c d ( a , b ) ∣ c gcd(a,b)\mid c g c d ( a , b ) ∣ c 时有解。
乘法逆元
若整数 b , m b,m b , m 互质,并且 b ∣ a b\mid a b ∣ a ,则存在一个整数 x x x ,使得 a / b ≡ a ∗ x ( m o d m ) a/b\equiv a*x(mod\ m) a / b ≡ a ∗ x ( m o d m ) 。称 x x x 为 b b b 的模 m m m 乘法逆元 ,记为 b − 1 ( m o d m ) b^{-1}(mod\ m) b − 1 ( m o d m ) 。
因为 a / b ≡ a ∗ b − 1 ≡ a / b ∗ b ∗ b − 1 ( m o d m ) a/b\equiv a*b^{-1}\equiv a/b*b*b^{-1}(mod\ m) a / b ≡ a ∗ b − 1 ≡ a / b ∗ b ∗ b − 1 ( m o d m ) ,所以 b ∗ b − 1 ≡ 1 ( m o d m ) b*b^{-1} \equiv 1(mod\ m) b ∗ b − 1 ≡ 1 ( m o d m ) 。
如果 m m m 是质数(此时我们用符号 p p p 代替 m m m )并且 b < p b<p b < p ,根据费马小定理, b p − 1 ≡ 1 ( m o d p ) b^{p-1}\equiv 1(mod\ p) b p − 1 ≡ 1 ( m o d p ) ,即 b ∗ b p − 2 ≡ 1 ( m o d p ) b*b^{p-2}\equiv 1(mod\ p) b ∗ b p − 2 ≡ 1 ( m o d p ) 。因此,当模数 p p p 为质数时,b p − 2 b^{p-2} b p − 2 即为 b b b 的乘法逆元 。
线性同余方程
给定整数 a , b , m a,b,m a , b , m ,求一个整数 m m m 满足 a ∗ x ≡ b ( m o d m ) a*x\equiv b\ (mod\ m) a ∗ x ≡ b ( m o d m ) 。
原式等价于 a ∗ x − b a*x-b a ∗ x − b 是 m m m 的倍数,不妨设为 − y -y − y 倍,则可以改写为 a ∗ x + m ∗ y = b a*x+m*y=b a ∗ x + m ∗ y = b ,有解当且仅当 g c d ( a , m ) ∣ b gcd(a,m)\mid b g c d ( a , m ) ∣ b 。
组合计数
性质
C n m = C n n − m C_n^m=C_n^{n-m} C n m = C n n − m
C n m = C n − 1 m + C n − 1 m − 1 C_n^m=C_{n-1}^m+C_{n-1}^{m-1} C n m = C n − 1 m + C n − 1 m − 1
C n 0 + C n 1 + C n 2 + ⋅ ⋅ ⋅ + C n n = 2 n C_n^0+C_n^1+C_n^2+···+C_n^n=2^n C n 0 + C n 1 + C n 2 + ⋅ ⋅ ⋅ + C n n = 2 n
求法
预处理阶乘与阶乘的逆元,使用定义公式计算。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 int qmi (int x, int n) { int res = 1 ; while (n) { if (n & 1 ) res = (long long )res * x % MOD; x = (long long )x * x % MOD; n >>= 1 ; } return res; } fact[0 ] = infact[0 ] = fact[1 ] = infact[1 ] = 1 for (int i = 1 ; i <= N; i++){ fact[i] = (long long )fact[i - 1 ] * i % MOD; infact[i] = (long long )infact[i - 1 ] * qmi (i, MOD - 2 ) % MOD; } c (a, b) = (long long )fact[a] * infact[a-b] % MOD * infact[b] % MOD;
当 a , b a,b a , b 很大但是模数很小时,可以使用Lucas定理:
C a b ≡ C a m o d p b m o d p ⋅ C a / p b / p ( m o d p ) C_a^b\equiv C_{a\ mod\ p}^{b\ mod\ p}\cdot C_{a/p}^{b/p}(mod\ p)
C a b ≡ C a m o d p b m o d p ⋅ C a / p b / p ( m o d p )
简化计算。
概率和数学期望
博弈论
NIM博弈
给定 n n n 堆物品,第 i i i 堆物品有 A i A_i A i 个。两名玩家轮流行动,每次可以任选一堆,取走任意多个物品,可把一堆取光,但不能不取。取走最后一件物品者获胜。两人都采取先手策略,问先手能否必胜。
这种游戏是 NIM博弈 。把游戏过程中面临的状态称为局面。整局游戏第一个行动的称为先手 ,第二个行动的称为后手 。若在某一局面下无论采取何种行动,都会输掉游戏,则称该局面必败 。若存在某种行动使得行动后对手面临必败局面,这一局面称为必胜 。NIM博弈只有先手必胜和必败两种情况。
定理
NIM博弈先手必胜,当且仅当 A 1 x o r A 2 x o r ⋅ ⋅ ⋅ x o r A n ≠ 0 A_1\ xor\ A_2\ xor\ ···\ xor A_n \neq 0 A 1 x o r A 2 x o r ⋅ ⋅ ⋅ x o r A n = 0 。
证明
所有物品都被取光是一个必败局面,此时有 A 1 x o r A 2 x o r ⋅ ⋅ ⋅ x o r A n = 0 A_1\ xor\ A_2\ xor\ ···\ xor A_n = 0 A 1 x o r A 2 x o r ⋅ ⋅ ⋅ x o r A n = 0 。
对于任意一个局面,设异或和为 x x x 。若其非零,设其二进制表示下最高位的 1 1 1 在第 k k k 位,此时必定存在一个 A i A_i A i 使得第 k k k 位也是 1 1 1 ,此时有 A i x o r x < A i A_i\ xor\ x < A_i A i x o r x < A i ,于是取走 A i A_i A i 的物品使之变为 A i x o r x A_i\ xor\ x A i x o r x ,则所剩石子异或和为 0 0 0 。
若 x x x 为零,无论如何取物品,得到的局面下异或和都不为零。
公平组合游戏ICG
若一个游戏满足
由两名玩家交替行动
在游戏进程的任意时刻,可以执行的合法行动与轮到哪名玩家无关
不能行动的玩家判负
则称该游戏为一个公平组合游戏。NIM博弈属于公平组合游戏。
有向图游戏
给定一个有向无环图,图中有一个唯一的起点,在起点上放有一枚棋子,两名玩家交替地把这枚棋子沿有向边进行移动,每次可以移动一步,无法移动者判负。
该游戏被称为有向图游戏。任何一个公平组合游戏都可以转化为有向图游戏。具体方法是,把每个局面看成图中的一个节点。
Mex运算
设 S S S 表示一个非负整数集合。定义 m e x ( S ) mex(S) m e x ( S ) 为求出不属于集合 S S S 的最小非负整数运算,即:
m e x ( S ) = m i n { x ∣ x ∈ N , x ∉ S } mex(S) = min\{x|x\in N, x \notin S \}
m e x ( S ) = m i n { x ∣ x ∈ N , x ∈ / S }
SG函数
在有向图游戏中,对于每个节点 x x x ,设从 x x x 出发共有 k k k 条有向边,分别到达节点 y 1 , y 2 , ⋅ ⋅ ⋅ , y k y_1,y_2,···,y_k y 1 , y 2 , ⋅ ⋅ ⋅ , y k ,定义 S G ( x ) SG(x) S G ( x ) 为 x x x 的后继节点 y 1 , y 2 , ⋅ ⋅ ⋅ y k y_1,y_2,···y_k y 1 , y 2 , ⋅ ⋅ ⋅ y k 的SG函数值构成的集合再执行 m e x mex m e x 运算的结果,即:
S G ( x ) = m e x ( S G ( y 1 ) , S G ( y 2 ) , ⋅ ⋅ ⋅ , S G ( y k ) ) SG(x)=mex({SG(y_1),SG(y_2),···,SG(y_k)})
S G ( x ) = m e x ( S G ( y 1 ) , S G ( y 2 ) , ⋅ ⋅ ⋅ , S G ( y k ) )
特别地,整个有向图游戏 G G G 的SG函数值被定义为有向图游戏起点 s s s 的SG函数值,即 S G ( G ) = S G ( s ) SG(G)=SG(s) S G ( G ) = S G ( s ) 。
有向图游戏的和
设 G 1 , G 2 , ⋅ ⋅ ⋅ , G m G_1,G_2,···,G_m G 1 , G 2 , ⋅ ⋅ ⋅ , G m 是 m m m 个有向图游戏,定义有向图游戏 G G G ,它的行动规则是任选某个有向图游戏 G i G_i G i ,并在 G i G_i G i 上行动一步。G G G 被称为有向图游戏 G 1 , G 2 , ⋅ ⋅ ⋅ , G m G_1,G_2,···,G_m G 1 , G 2 , ⋅ ⋅ ⋅ , G m 的和。有向图游戏的和的SG函数值等于它包含的子游戏SG函数值的异或和,即
S G ( G ) = S G ( G 1 ) x o r S G ( G 2 ) x o r ⋅ ⋅ ⋅ x o r S G ( G m ) SG(G)=SG(G_1)\ xor\ SG(G_2)\ xor\ ···\ xor\ SG(G_m)
S G ( G ) = S G ( G 1 ) x o r S G ( G 2 ) x o r ⋅ ⋅ ⋅ x o r S G ( G m )
有向图游戏的某个局面必胜,当前仅当该局面对应节点的SG函数值大于0;必败,当且仅当该局面对应节点的SG函数值等于0。