栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

素数筛的两个常用板子——欧筛和埃筛

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

素数筛的两个常用板子——欧筛和埃筛

直接上代码了,两个筛法很简单,就不多加赘述了

#include
#include
#define ll long long
#define pii pair
#define inf 1e9
using namespace std;
const int N = 1e8+5;
const int mod = 1e9+9;
int t, n, m;
// 欧筛
int k;
int prime[N];
int vis[N];
void Ou_init(){
	for(int i = 2;i <= N/2;i++){
		if(!vis[i])prime[k++] = i;
		for(int j = 0;j < k&&prime[j]*i<=N;j++){
			vis[i*prime[j]]=1;
			if(i%prime[j]==0)break;
		}
	}
}
// 埃筛
int vim[N];
void Ai_init(){
	for(int i = 2;i <= N;i++){
		if(!vim[i]){
			int l = 2;
			while(l*i<=N){
				vim[l*i] = 1;
				l++;
			}
		}
	}
}
void solve(){
	Ou_init();
	Ai_init();
	for(int i = 2;i <= N;i++){
		if(vis[i]!=vim[i])cout<>t;
	// while(t--)
	solve();
	return 0;
}

简单记录一下板子
快读

template 
inline void read(T &res)
{
	char c;
	T flag = 1;
	while ((c = getchar()) < '0' || c > '9')
		if (c == '-')
			flag = -1;
	res = c - '0';
	while ((c = getchar()) >= '0' && c <= '9')
		res = res * 10 + c - '0';
	res *= flag;
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/784025.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号