数论笔记(1)
模运算的性质:
- 加法:
\[(A+B)\bmod C = (A \bmod C + B \bmod C) \bmod C
\]
- 乘法:
\[(A \times B) \bmod C = (A \bmod C \times B \bmod C) \bmod C
\]
- 减法:
\[(A - B) \bmod C = [(A \bmod C - B \bmod C)+C] \bmod C
\]
快速幂:
因为 \(a^b\) 可以看成 \(a^{(b)_2}\)。
所以 \(a^b\) 可以表达成为 \(a^{2^i}\),证明如下:
\[\begin{array}{}
\because a^{b+c} = a^ba^c\\\\
\because b = \sum_{i}^{\operatorname{len}(b)}2^i\\\\
\therefore a^{\sum_{i}^{\operatorname{len}(b)}2^i} = \prod_i^{\operatorname{len}(b)}a^{2^i}
\end{array}{}
\]
于是,我们可以根据此性质加以位运算就能快速算出幂的大小.。
long long fastfac(long long a,long long b){
	long long ans = 1;
	while(b>0){
		if(b&1)
			ans = ans * a;
		b >>= 1;
		a = a * a;
	}
	return ans;
}
欧拉函数 \(\varphi\):
- 
作用:用于求得小于 \(n\) 的正整数中与 \(n\) 互质的数的个数。 
- 
计算式: 
\[\varphi(n) = n \times \prod_{p\mid n}\frac{p-1}{p}
\]
- 证明:
\[  \begin{array}{}
  \because n = p_1^{a_1} \times p_2^{a_2} \times p_3^{a_3} \times ... \times p_k^{a_k}\\
  \\
  \therefore \varphi(n) = \varphi(p_1^{a_1}) \times \varphi(p_2^{a_2}) \times ... \times \varphi(p_k^{a_k})\\
  \\
  \because \varphi(p^k) = p^{k-1}(p-1)\\
  \\
  \therefore \varphi(p^k) = p^k(1-\dfrac 1p)\\
  \\
  \therefore \varphi(n) =  p_1^{a_1}(1-\dfrac{1}{p_1}) \times p_2^{a_2}(1-\dfrac{1}{p_2})\times ... \times p_k^{a_k}(1-\dfrac{1}{p_k})
  \end{array}{}
\]
整理算式,可知:
\[\begin{array}{}
\varphi(n) = \prod_{p\mid n}p^a\prod_{p\mid n}(1-\dfrac{1}{p})\\\\
\because n = \prod_{p\mid n}p^a\\\\
\therefore \varphi(n) = n \times \prod_{p\mid n} (1-\dfrac 1p)
\end{array}
\]
- 性质:
- 当 \(p\) 为质数时,则有:\(\varphi(p) = p-1\)。
- 当 \(p\) 为质数时,则有:\(\varphi(p^k) = p^{k-1}(p-1) = p^k(1-\dfrac 1p) = p^k(\dfrac {p-1}{p})\)。
- \(\varphi\) 为积性函数,即:\(\varphi(mn) = \varphi(m)\times\varphi(n)\)。
- 当 \(p\) 为质数时,若 \(p\mid n\) 且 \(p^2\mid n\),则有 \(\varphi(n) = \varphi(\dfrac np) \times p\)。
- 当 \(p\) 为质数时,若 \(p\mid n\) 且 \(p^2\) 不是 \(n\) 的因子,则有 \(\varphi(n) = \varphi(\dfrac np) \times (p-1)\)。
- \(\forall n \in N , n = \sum_{d\mid n} \varphi(d)\)。
- \(\forall n > 1 , 1 \sim n\) 中与 \(n\) 互质的数的和为:\(\dfrac{n\times \varphi(n)}{2}\)。
 
- 实现:一般使用欧拉筛来求 \(\varphi\):
int phi(int num) {
	int fin = sqrt(num);
	int ans = num;
	for (int i = 2; i <= fin; i++) {
		if (num % i == 0) {
			ans /= i;
			ans *= (i - 1);
		}
		while (num % i == 0)
			num /= i;
	}
	if (num > 1) {
		ans /= num;
		ans *= (num - 1);
	}
	return ans;
}
\(\gcd(a,b)\) 和 \(\operatorname{lcm}(a,b)\):
- \(\gcd(a,b)\):
- 作用:求得 \(a\),\(b\) 的最大公因数。
- 性质:
- \(\gcd(a,b)=\gcd(b,a)\)。
- \(\gcd(a,b) = gcd(-a,b)\)。
- \(gcd(a,b) = gcd(|a|,|b|)\)。
- 若有 \(d\mid a\) 且 \(d\mid b\),则 \(d\mid\gcd(a,b)\)。
- \(\gcd(a,0) = a\)。
- \(\gcd(a,ka) = a\)。
- \(\gcd(an,bn) = n \gcd(a,b)\)。
- \(\gcd(a,b) = \gcd(a,ka+b)\)。
 
- 实现:辗转相除法(欧几里得算法):
 
int gcd(int a, int b) {
	return b ? gcd(b, a % b) : a;
}
- 
\(\operatorname{lcm}(a,b)\): - 
作用:求得 \(a\),\(b\) 的最小公倍数。 
- 
性质: - \(\gcd(a,b) \times \operatorname{lcm}(a,b) = a \times b\)。
- 若有 \(a\mid m\) 且 \(b\mid m\),那么 \(\operatorname{lcm}(a,b)\mid m\)。
- 若 \(m,a,b\) 是正整数,那么 \(\operatorname{lcm}(ma,mb) = m\times\operatorname{lcm}(a,b)\)
 
- 
求 \(n\) 个数的最小公倍数(\(n\ge2\)): 
 
- 
\[    \begin{array}{}
    \operatorname{lcm}(a_1,a_2) = \dfrac{a_1a_2}{\gcd(a_1,a_2)}\\\\
    \operatorname{lcm}(a_1,a_2,a_3) = \operatorname{lcm}(\operatorname{lcm}(a_1,a_2),a_3)
    \end{array}
\]
- 实现:
long long lcm(const int a[], int n) {
	long long ans = 1;
	for (int i = 1; i <= n; i++)
		ans = ans * a[i] / gcd(ans, a[i]);
	return ans;
}
互质:
- 
定义:\(\forall a,b \in N\),若 \(\gcd(a,b) = 1\),那么就说 \(a,b\) 互质,若 \(n\) 个整数的最大公因数是 \(1\),那么就说这 \(n\) 个数两两互质。 
- 
推论:\(a,b\) 互质 \(\Longleftrightarrow\) \(\gcd(a,b) = 1\)。 
- 
性质: - 
两个不同的质数一定是互质的。 
- 
一个质数和另一个不为它倍数的数是互质的。 
- 
\(1\) 既不是质数,也不是合数。 
- 
\(1\) 与任意一个数(除了 \(1\) 本身)都是互质的。 
- 
相邻的两个自然数是互质的。 
- 
相邻的两个奇数是互质的。 
- 
较大数是质数的两个数是互质的。 
 
- 

 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号