2024.7.18 HASC2024 数论笔记
本文章为本人所记录的笔记,供回忆用 。
---------- 前言
筛法
埃氏筛
基本思想
对于每一个合数而言,它肯定是其中若干个比它小的质数的倍数。于是我们对于每一个质数
我们遍历所有的数,如果遇到一个没有打上标记的数,则此数为质数(前面没有任何一个质数是它的倍数),并用这个新质数来拓展标记。
优化
我们观察到,对于
code
bool isprime[N];
vector<int> p;
void ishi(){
for(int i=2;i<=N;i++){
if(!isprime[i]){
p.push_back(i);
for(int j=i;j*i<=N;j++){
isprime[i*j]=1;
}
}
}
}
线性筛
基本思路
埃氏筛可能还是会给一个数重复打标签,如
显然,我们只需要让每个数的最小质因子给这个数打上标签即可实现
code
bool isprime[N];
vector<int> p;
void get(){
for(int i=2;i<=n;i++){
if(!isprime[i]){
p.push_back(i);
}
for(int j=0;j<p.size()&&i*p[j]<=n;j++){
isprime[i*p[j]]=1;
if(i%p[j]==0)break;
}
}
}
gcd & lcm
概念
证明
设