质数&约数 学习笔记
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);}

浙公网安备 33010602011771号