质数&约数 学习笔记

1.线性筛质数

inl void get_prime(int n){
    for(int i=2;i<=n;i++){
        if(!vis[i])prime[++cnt]=i;
        for(int j=1;j<=cnt&&i*prime[j]<=n;j++){
            vis[i*prime[j]]=1;
            if(!(i%prime[j]))break;
        }
    }
}

upd24.1.18:每个合数会被一个数里最小的质因数筛出 也就是说 \(i\) 是这个数除自身外最大的因数

2.算术基本定理

正整数\(N\)可以被唯一分解为\(N=p_1^{c_1}p_2^{c_2}...p_m^{c_m}\)
其中\(c_i\)均为整数,\(p_i\)均为质数且\(p_1<p_2<...<p_m\)
推论:
1.正整数\(N\)的正约数个数:\(\prod\limits_{i=1}^m(c_i+1)\)
(每种质数选/不选 共\(c_i+1\)种)
2.正整数\(N\)的正约数的和:\(\prod\limits_{i=1}^m\sum\limits_{j=1}^{c_i}p_i^j=\prod\limits_{i=1}^m\tfrac{p_i^{c_i+1}-1}{p_i-1}\)

3.最大公约数

欧几里得算法:\(\gcd(a,b)=\gcd(b,a\bmod b)\)

inl int gcd(int a,int b){return !b?a:gcd(b,a%b);}
posted @ 2023-09-23 21:14  xiang_xiang  阅读(28)  评论(0)    收藏  举报