加载中...

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}\)
img

如何求:

  1. 从1~N中去掉 p1 p2 ... pk 的倍数.
  2. 加上所有 pi * pj的倍数
  3. 去掉所有..... 加上...

容斥原理....

时间复杂度 \(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)$

img

听到了4分多.


求组合数

容斥原理

博弈论

posted @ 2022-02-01 10:11  benenzhu  阅读(54)  评论(0)    收藏  举报