2022.02.01刷题
欧拉函数
欧拉函数
1 ~ N 中和 N 互质的数的个数.
\(N = p_1^{a_1}p_2^{a_2}…p_m^{a_m}\)
\(\phi(N) = N \times \frac{p_1-1}{p_1} \times \frac{p_2-1}{p_2} \times … \times \frac{p_m-1}{p_m}\)

如何求:
- 从1~N中去掉 p1 p2 ... pk 的倍数.
- 加上所有
pi * pj的倍数 - 去掉所有..... 加上...
容斥原理....
时间复杂度 \(O(\sqrt n)\)
直接根据定义 求 不套用筛法.
筛法求欧拉函数
1~N 每个数的欧拉函数之和.
根据前一个数的欧拉函数求出当前自己.
pj-1 或者直接的 pj .
快速幂
快速幂
$a^k \text{mod }p $ 在 O(logk) 时间内 求出来,
反复平方法
将 k 转换成 2进制就行了.
\(a^{2^{logk}} = (a^{2^{logk-1}})^2\)
欧拉降幂
不要用qmi(read(), read(), read()) 这种写法了...
int n;
int qmi(int a, int k, int p) {
int res = 1;
while (k) {
if (k & 1) res = (LL)res * a % p;
k >>= 1;
a = (LL)a * a % p;
}
return res;
}
int main() {
n = read();
rep(i, 0, n) {
int a = read(), k = read(), p = read();
printf("%d\n", qmi(a, k, p));
// printf("%d", qmi(read(), read(), read()));
//不准这么用了.... 执行顺序不一样
}
return 0;
}
快速幂求逆元
具体看推导吧, 其实就是求 \(b^{p-2}\) 快速幂.
b和p需要一定互质.
卢卡斯定理??
费马小定理.
扩展欧几里得算法
扩展欧几里得算法
裴蜀定理: \(\forall\)正整数a,b 一定存在 x,y :
ax+by = gcd(a,b) 是 a 和 b 能凑出来的最小的正整数.
ax+by 一定是 gcd(a,b) 的倍数
构造法: 扩展欧几里得算法.
y -= a / b * x ..
\(a_i \times x_i + b_i \times y_i = gcd(a_i, b_i)\)
线性同余方程
线性同余方程, mod m 以后结果是相同的.
\(a_i \times x_i \equiv b_i \pmod {m_i}\)
=>\(ax = m\cdot y+b\)
给定, a m b 求出来 x 和 y .
需要让 b 是 a 和 m 的 gcd 的倍数就可以.
中国剩余定理
表达整数的奇怪方式
\(a_1,a_2,…,a_n 和 m_1,m_2,…,m_n\) 求最小的 \(x\)
$ \forall i \in [1,n],x \equiv m_i(mod\ a_i)$

听到了4分多.

浙公网安备 33010602011771号