筛质数
筛质数
题目
方法
线性筛法 O(n)
思路
要求每一次要找到以primes[i]为最小公约数的合数。
当有i%primes[j]==0时,说明i的最小质因子是primes[j],因此primes[j]*i的最小质因子也就应该是prime[j],之后接着用st[primes[j+1]i]=true去筛合数时,就不是用最小质因子去更新了,因为i有最小质因子primes[j]<primes[j+1],此时的primes[j+1]不是primes[j+1]i的最小质因子,此时就应该退出循环,避免之后重复进行筛选。
代码
void get_primes(int n){
for (int i = 2; i <= n; i ++ ){
if(!st[i]) primes[ans++]=i;
for (int j =0 ; primes[j]*i <= n; j ++ ){
st[primes[j]*i]=true;
if(i%primes[j]==0) break;
}
}
}

浙公网安备 33010602011771号