0
点赞
收藏
分享

微信扫一扫

【5】质数筛复习

Ewall_熊猫 2022-03-30 阅读 52
c++

欧拉筛写法

#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
#define MAXN 10000000
vector<int>prime;
vector<bool>vis;
void OLA(int n)
{
	prime.resize(n + 1);
	vis.resize(n + 1);
	for (int i = 1; i <= n; i++)
		vis[i] = true;
	vis[1] = false;
	for (int i = 2; i <= n; i++)
	{
		if (vis[i]) prime[++prime[0]] = i;
		for (int j = 1; j <= prime[0] && prime[j] * i <= n; j++)
		{
			vis[prime[j] * i] = false;
			if (i % prime[j] == 0) break;
		}
	}
}
int main()
{
	int n;
	cin >> n;
	OLA(n);
	for (int i = 1; i <= prime[0]; i++)
		cout << prime[i] << endl;
	return 0;
}

埃氏筛写法

#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
#define MAXN 10000000
bool vis2[MAXN+1];
void AISHI(int n)
{
	for (int i = 1; i <= n; i++)
		vis2[i] = true;
	vis2[1] = false;
	for (int i = 1; i <= n; i++)
	{
		if (!vis2[i]) continue;
		for (int j = i; j * i <= n; j++)
			vis2[j * i] = false;
	}
	for (int i = 1; i <= n; i++)
		if (vis2[i]) cout << i << endl;
}
int main()
{
	int n;
	cin >> n;
	AISHI(n);
	return 0;
}
举报

相关推荐

0 条评论