求n以内的的素数——埃氏筛法和欧拉筛法

2023-12-30 06:48

本文主要是介绍求n以内的的素数——埃氏筛法和欧拉筛法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

求N以内的素数,朴素算法对于10^7之类的大数无疑是要超时的。时间复杂度为O(N^2)和O(N)

所以就需要一个效率更加高的方法来进行素数筛选。

1.Eratosthenes筛法(埃氏筛法)

时间复杂度:O(n*lglgn)(  约等于 O(n*1.5) )

筛法的思想:对于不超过N的每个非负整数p,删除2p,3p,4p,...,但处理完所有数之后,还没有被删除的就是素数。可用标志数组bk[i]来判断i是否被删除了。代码如下:

bool bk[1000];
memset(bk,1,sizeof(bk));
for(int i = 2; i <= N; i++)for(int j = i*2; j <= N;j += i ){bk[j] = 0;}

下面来模拟一下这个过程:

假设N = 20;

         这份代码已经相当高效了。给定外层的循环变量i,内层的循环次数是 floor&#x

这篇关于求n以内的的素数——埃氏筛法和欧拉筛法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/552029

相关文章

uva 1342 欧拉定理(计算几何模板)

题意: 给几个点,把这几个点用直线连起来,求这些直线把平面分成了几个。 解析: 欧拉定理: 顶点数 + 面数 - 边数= 2。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#inc

欧拉系统 kernel 升级、降级

系统版本  cat  /etc/os-release  NAME="openEuler"VERSION="22.03 (LTS-SP1)"ID="openEuler"VERSION_ID="22.03"PRETTY_NAME="openEuler 22.03 (LTS-SP1)"ANSI_COLOR="0;31" 系统初始 kernel 版本 5.10.0-136.12.0.

c++习题30-求10000以内N的阶乘

目录 一,题目  二,思路 三,代码    一,题目  描述 求10000以内n的阶乘。 输入描述 只有一行输入,整数n(0≤n≤10000)。 输出描述 一行,即n!的值。 用例输入 1  4 用例输出 1  24   二,思路 n    n!           0    1 1    1*1=1 2    1*2=2 3    2*3=6 4

nyoj99(并查集+欧拉路+dfs)

单词拼接 时间限制: 3000 ms  |  内存限制: 65535 KB 难度: 5 描述 给你一些单词,请你判断能否把它们首尾串起来串成一串。 前一个单词的结尾应该与下一个单词的道字母相同。 如 aloha dog arachnid gopher tiger rat   可以拼接成:aloha.arachnid.dog.gopher.rat.tiger 输入 第一行是一个整

nyoj42(并查集解决欧拉回路)

一笔画问题 时间限制: 3000 ms  |  内存限制: 65535 KB 难度: 4 描述 zyc从小就比较喜欢玩一些小游戏,其中就包括画一笔画,他想请你帮他写一个程序,判断一个图是否能够用一笔画下来。 规定,所有的边都只能画一次,不能重复画。   输入 第一行只有一个正整数N(N<=10)表示测试数据的组数。 每组测试数据的第一行有两个正整数P,Q(P<=1000,Q<

UVa 10820 Send a Table (Farey数列欧拉函数求和)

这里先说一下欧拉函数的求法 先说一下筛选素数的方法 void Get_Prime(){ /*筛选素数法*/for(int i = 0; i < N; i++) vis[i] = 1;vis[0] = vis[1] = 0;for(int i = 2; i * i < N; i++)if(vis[i]){for(int j = i * i; j < N; j += i)vis[j] =

JD 1027:欧拉回路

OJ题目:click here~~ 题目分析: 若图G中存在这样一条路径,使得它恰通过G中每条边一次,则称该路径为欧拉路径。若该路径是一个圈,则称为欧拉(Euler)回路。 具有欧拉路径的图称为欧拉图(简称E图)。 无向图存在欧拉回路的充要条件: 一个无向图存在欧拉回路,当且仅当该图拥有奇数度数的顶点的个数为0且该图是连通图。 有向图存在欧拉回路的充要条件: 一

js算法判断是否为素数

/*判断一个数字是否是质数: 质数(prime number)又称素数,有无限个。除了1和它本身以外不再被其他的除数整除。*/ function isPrime(number){ //判断输入是否为number类型,是否为整数       if (typeof number!=='number'||!Number.isInteger(number))      {

发现个有趣的东西:Tweetable Mathematical Art(用三个140字符以内的函数生成一个1024尺寸的图片)

发现 我是在看《构建之法》这本书时,看到作者提到这个: 好厉害!用三段140字符以内的代码生成一张1024×1024的图片_IT新闻_博客园 这是2014年一个人在 Code Golf Stack Exchange (a question and answer site for programming puzzle enthusiasts and code golfers) 发起的编程挑战:

500以内蓝牙耳机最良心推荐有哪些?四款百元平价必入机型盘点

面对市场上琳琅满目的蓝牙耳机品牌和型号,消费者往往感到困惑,特别是在预算有限的情况下,如何挑选出既满足质量又符合价格预期的产品似乎成了一项挑战,那么500以内蓝牙耳机最良心推荐有哪些?为了帮助大家轻松找到适合自己且价格合理的蓝牙耳机,我今天特别带来了四款百元平价必入机型盘点,下面,让我们一起深入了解这四款平价蓝牙耳机的各项性能,看看它们是否真正符合你的需求和预期。 500以内蓝牙耳机最良