数论笔记(1)

模运算的性质:

  1. 加法:

\[(A+B)\bmod C = (A \bmod C + B \bmod C) \bmod C \]

  1. 乘法:

\[(A \times B) \bmod C = (A \bmod C \times B \bmod C) \bmod C \]

  1. 减法:

\[(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\)

  1. 作用:用于求得小于 \(n\) 的正整数中与 \(n\) 互质的数的个数。

  2. 计算式:

\[\varphi(n) = n \times \prod_{p\mid n}\frac{p-1}{p} \]

  1. 证明:

\[ \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} \]

  1. 性质:
    1. \(p\) 为质数时,则有:\(\varphi(p) = p-1\)
    2. \(p\) 为质数时,则有:\(\varphi(p^k) = p^{k-1}(p-1) = p^k(1-\dfrac 1p) = p^k(\dfrac {p-1}{p})\)
    3. \(\varphi\) 为积性函数,即:\(\varphi(mn) = \varphi(m)\times\varphi(n)\)
    4. \(p\) 为质数时,若 \(p\mid n\)\(p^2\mid n\),则有 \(\varphi(n) = \varphi(\dfrac np) \times p\)
    5. \(p\) 为质数时,若 \(p\mid n\)\(p^2\) 不是 \(n\) 的因子,则有 \(\varphi(n) = \varphi(\dfrac np) \times (p-1)\)
    6. \(\forall n \in N , n = \sum_{d\mid n} \varphi(d)\)
    7. \(\forall n > 1 , 1 \sim n\) 中与 \(n\) 互质的数的和为:\(\dfrac{n\times \varphi(n)}{2}\)
  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)\)

  1. \(\gcd(a,b)\)
    1. 作用:求得 \(a\)\(b\) 的最大公因数。
    2. 性质:
      1. \(\gcd(a,b)=\gcd(b,a)\)
      2. \(\gcd(a,b) = gcd(-a,b)\)
      3. \(gcd(a,b) = gcd(|a|,|b|)\)
      4. 若有 \(d\mid a\)\(d\mid b\),则 \(d\mid\gcd(a,b)\)
      5. \(\gcd(a,0) = a\)
      6. \(\gcd(a,ka) = a\)
      7. \(\gcd(an,bn) = n \gcd(a,b)\)
      8. \(\gcd(a,b) = \gcd(a,ka+b)\)
    3. 实现:辗转相除法(欧几里得算法):
int gcd(int a, int b) {
	return b ? gcd(b, a % b) : a;
}
  1. \(\operatorname{lcm}(a,b)\)

    1. 作用:求得 \(a\)\(b\) 的最小公倍数。

    2. 性质:

      1. \(\gcd(a,b) \times \operatorname{lcm}(a,b) = a \times b\)
      2. 若有 \(a\mid m\)\(b\mid m\),那么 \(\operatorname{lcm}(a,b)\mid m\)
      3. \(m,a,b\) 是正整数,那么 \(\operatorname{lcm}(ma,mb) = m\times\operatorname{lcm}(a,b)\)
    3. \(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} \]

  1. 实现:
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;
}

互质:

  1. 定义:\(\forall a,b \in N\),若 \(\gcd(a,b) = 1\),那么就说 \(a,b\) 互质,若 \(n\) 个整数的最大公因数是 \(1\),那么就说这 \(n\) 个数两两互质。

  2. 推论:\(a,b\) 互质 \(\Longleftrightarrow\) \(\gcd(a,b) = 1\)

  3. 性质:

    1. 两个不同的质数一定是互质的。

    2. 一个质数和另一个不为它倍数的数是互质的。

    3. \(1\) 既不是质数,也不是合数。

    4. \(1\) 与任意一个数(除了 \(1\) 本身)都是互质的。

    5. 相邻的两个自然数是互质的。

    6. 相邻的两个奇数是互质的。

    7. 较大数是质数的两个数是互质的。

posted @ 2022-08-25 11:22  Larry76  阅读(58)  评论(0)    收藏  举报