数学知识模板之筛法求素数

筛法求素数

1. 朴素筛法求素数

int primes[N],cnt;
bool st[N];
void get_primes(int n)
{
	for(int i = 2;i <= n;i ++ )
	{
		if(st[i]) continue;
		primes[cnt ++ ] = i;
		for(int j = i + i;j <= n;j += i)
			st[j] = true;
	}
}

2. 线性筛法求素数

int primes[N],cnt;
bool st[N];
void get_primes(int n)
{
	for(int i = 2;i <= n;i ++ )
	{
		if(!st[i])
			primes[cnt ++ ] = i;
		for(int j = 0;primes[j] <= n / i;j ++ )
		{
			st[primes[j] * i] = true;
			if(i % primes[j] == 0) break;
		}
	}
}
posted @ 2023-03-19 21:02  知凹  阅读(15)  评论(0)    收藏  举报