筛选素数

如何筛选2~N之间的素数? 线性筛法(或者欧拉筛法),时间复杂度O(n)

vector<int> pick_primers(int n)
{
	vector<int> primers;
	vector<bool> not_primer(n+1);
	for(int i = 2; i <= n; i++)
	{
		if(!not_primer[i])
			primers.push_back(i);
		for(int pri : primers)
		{
			if(i * pri > n)
				break;
			not_primer[i * pri] = true;
			if(i % pri == 0)
			{
				// i 之前被pri筛选过了
				break;
			}
		}
	}
	return primers;
}