首页 > 其他分享 >埃氏筛 & 欧拉筛

埃氏筛 & 欧拉筛

时间:2023-02-24 18:55:23浏览次数:43  
标签:埃氏 数列 int 合数 1005 质数 欧拉

Part1 埃氏筛

埃拉托斯特尼筛法,简称埃氏筛或爱氏筛,是一种由希腊数学家埃拉托斯特尼所提出的一种简单检定素数的算法。要得到自然数n以内的全部素数,必须把不大于根号n的所有素数的倍数剔除,剩下的就是素数。

---百度词条

思想

从一数列中最小质数开始,寻找其倍数,即合数,筛去

直至最后一个质数,此时余下的即数列中所有质数

时间复杂度为 $ O$ ( $ n$ $ log$ $ log$ $ n$ )

图示

埃氏筛

Code

#include <bits/stdc++.h>

using namespace std;

int n, ans = 0;
int num[1005], prime[1005];

int main() {
	scanf("%d", &n);
	for (int i = 1; i <= n; i++) scanf("%d", &num[i]);
	for (int i = 2; i <= n; i++) {
		if (!prime[i]) {
			ans++;
			for (int j = 2; j <= n / i; j++)
				a[i * j] = 1;
			printf("%d", i);
		}
	}
	return 0;
}

Part2 欧拉筛 / 线性筛

快于埃氏筛,避免重复标记

思想

每个合数只被它的最小质因数筛去,这样就能保证每个合数只被筛一次

时间复杂度为 $ O$ ( $ n$ )

步骤

$ Step 1$
建立一个数列和质数数列 ($ 2$ 到 $ n$ )

$ Step 2$
取数,判断是否为质数,如果是用这个数乘遍质数数列中的数,即为合数,然后在数列中删去合数

Code

#include <bits/stdc++.h>

using namespace std;

int n, k = 0;
int num[1005] = {}, prime[1005];
bool ju[1005];

int main() {
	scanf("%d", &n);
	for (int i = 1; i <= n; i++) scanf("%d", &num[i]);
	for (int i = 2; i <= n; i++) {
		if (!ju[i]) {
			prime[++k] = i;
		}
		for (int j = 2; j <= k && i * prime[j] <= n; j++) {
			ju[i * p[j]] = 1;
			if (i % p[j] == 0) break;
		}
	}
	printf("%d", &k);
	return 0;
}

参考文章

link

标签:埃氏,数列,int,合数,1005,质数,欧拉
From: https://www.cnblogs.com/Gery-blog/p/17152786.html

相关文章

  • 混合图欧拉回路(核心也就是网络流啦)
    于2023/2/22日的模拟赛遇到了这一东西。也是网络流应用的一种新模型,感觉是大有可为啊,写个博客记录下。给定一个图,里面的边有的是有向边,有的是无向边,要求给出无向边的定......
  • 华为认证欧拉openEuler-HCIA文本编辑器及文本处理
    文本编辑器及文本处理文本编辑器介绍常见的Linux文本编辑器有:emacsnanogeditkeditvivimLinux文本编辑器-emacsemacs是一款功能强大的编辑器,与其说是一款编辑器,它更像......
  • 最快素数打表,比欧拉筛快一倍。
    1e7内比欧拉筛子快一倍,2e7持平,之后略慢不论N多大整体计算次数,都是欧拉筛子的1/3,求大神解答1e8之后为什么变慢思路:相较于欧拉筛考虑1-n所有数,这里基于孪生素数,只需要考虑......
  • C\C++ 埃氏筛法
     1埃氏筛法的基本思想:从2开始,将每个质数的倍数都标记成合数,以达到筛选素数的目的。1#include<iostream>2usingnamespacestd;3constintmaxn=1000;4i......
  • #10105. 「一本通 3.7 例 1」欧拉回路
     求欧拉回路(dfs) #include<bits/stdc++.h>usingnamespacestd;constintN=1e6+3,M=2e6+3;inlineintread(){intres=0,flag=1;ch......
  • 欧拉路 笔记
    欧拉路:从S到T不重复地经过图的所有边 存在性判定:有2个奇点(S,T),其他为偶点 欧拉回路:同欧拉路,但要求回到起点欧拉图:含有欧拉回路的图判定:(1)对无向图,所有点的度......
  • 欧拉筛分解质因子板子
    intp[N],pe[N],primes[N],cnt;voidinit(){for(inti=2;i<N;i++){if(!p[i])p[i]=i,pe[i]=i,primes[++cnt]=i;fo......
  • 华为欧拉openEuler22.03安装mysql时遇到的坑
    mysql:errorwhileloadingsharedlibraries:libncurses.so.5:cannotopensharedobjectfile:Nosuchfileordirectory这里是说在系统的/usr/lib64 这个目录......
  • 欧拉函数(线性筛)(超好Dong)
    欧拉函数:对于一个正整数n,小于n且和n互质的正整数(包括1)的个数,记作φ(n)。#include<bits/stdc++.h>usingnamespacestd;constintmaxn=1e6;boolvis[maxn];int......
  • 2021 年百度之星·程序设计大赛 - 初赛二 1003 魔怔(并查集,联通性,欧拉回路)
    problemsolution发现除了起点和终点,剩下所有点周围的边都会被恰经过偶数次,所以这些点初始连向了偶数条白边。考虑由白边连接形成的图,每个连通块中度数为奇数的点一定为偶数......