求质数(埃氏筛法)代码

//埃氏筛法 找质数的倍数 vis为0就为质数 数据大于1e7就用不了了
#include
#include
using namespace std;
using ll = long long;
const int N = 2e6 + 9;
bitset vis;

int main()
{
	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
	int n; cin >> n;
	vis[0] = vis[1] = true;
	for (ll i = 2; i <= n; ++i)//可以将2*i改成i*i
		if (!vis[i])for (ll j = 2 * i; j <= n; j += i)vis[j] = true;
	for (int i = 1; i <= n; ++i)if (!vis[i])cout << i << " ";
	return 0;
}

就是找到一个质数然后他的倍数一定不是质数,循环操作即可,vis值为0为质数。

注意要用long long类型

你可能感兴趣的:(c++,算法)