素数筛法详解:埃氏筛和欧拉筛

主要讲解怎么判断一个数字是否是素数:

埃式筛

学习埃氏筛之前,我们先看一下暴力筛法,即对每个数都用试除法判断其是不是质数:

暴力筛法:

# include <stdio.h>

int main()
{
    int st[N]; // 初始化为0, 0表示质数,1表示合数

    for(int i = 2; i <= n; i++)
    {
	    for(int j = 2; j <= i / j; j++)
        {//试除法
	    	if(i % j == 0){
	    		st[i] = 1; // 合数,标记为1 
	    }
    }
}

这种方式无疑是最慢的,我们看一下如何加快,换一种思路:一个质数的倍数一定是合数,所以,假设P是质数,那么就可以筛选掉2~100之间所有P的倍数。

先看个例子,对于数列1~11:

先筛去2的倍数:

然后筛去3的倍数:

然后筛去5的倍数:

至此,1~11内的所有合数都被筛完了, 2 3 5 7 11是数列中的质数。

为什么这样能筛去所有的合数呢,因为一个合数一定能被分解为几个质数的幂的乘积,并且这个数的质因子一定是小于它本身的,所以当我们从小到大将每个质数的倍数都筛去的话,当遍历到一个合数时,它一定已经被它的质因子给筛去了

埃氏筛代码:

# include <stdio.h>
int main()
{
	int n = 100;
	int st[100] = {0};
	for (int i=2; i<=n; ++i)
	{
		if (st[i] == 0)
		{
			for (int j=2*i; j<=n; j=j+i)
				st[j] = 1;// j是i的一个倍数,j是合数,筛掉。
		}
	}
}


以上的时间复杂度为

我们还可以对其进行优化:

        1.我们会先筛2的所有倍数,然后筛3的所有倍数,但筛除3的倍数时,我们还是从3的2倍开始筛,其实3 * 2 ,已经被2 * 3时筛过了。

        又比如说筛5的倍数时,我们从5的2倍开始筛,但是5 * 2会先被2 * 5筛去, 5 * 3会先被3 * 5会筛去,5 * 4会先被2 * 10筛去,所以我们每一次只需要从i*i开始筛,因为(2,3,…,i - 1)倍已经被筛过了。

       

优化后的埃式筛:

# include <stdio.h>
# include <math.h>
int main()
{
	int n = 100;
	int st[100] = {0};
	for (int i=2; i<=int(sqrt(n)); i++)
	{
		if(st[i] == 0)
		{
			for(int j = i * i; j <= n; j += i)
			    st[j] = 1; // j是i的一个倍数,j是合数,筛掉。
		}
	}
}

优化后的时间复杂度可以近似看成O ( n ) 了。

但是,我们还可以更快,那就是欧拉筛。

欧拉筛

欧拉筛,又称为线性筛,时间复杂度为O ( n )

欧拉筛之所以能这么快,是因为不重复筛选,特点是合数都是被它的最小质因子筛去的

代码:

# include <stdio.h>
# include <stdio.h>

int main()
{
	int n = 100;
	int st[100];//用于表示i是否是素数,如果是则为1,不是则为0
	for (int i=0; i<100; ++i)
		st[i] = 1;// 初始化
	int primes[100];//用于存储素数。
	int k = 0;
	for (int i=2; i<=int(sqrt(n)); ++i)
	{
		if (st[i] == 1)
		{
			primes[k] = i;
			k = k + 1;
		}
		for (int j=0; j<k; ++j)
		{
			st[primes[j]*i] = 0; //筛去合数 
			if (i % primes[j] == 0) // 若 primes[j]是(合数)i的最小素因子,结束本轮遍历,防止重复标记 
				break;
		}
	} 
} 

欧拉筛的核心思想就是确保每个合数只被最小质因数筛掉。

可以参考对欧拉筛的解释视频:

欧拉筛,几行就行,一次就好_哔哩哔哩_bilibiliicon-default.png?t=N7T8https://www.bilibili.com/video/BV1LR4y1Z7pm/?spm_id_from=333.337.search-card.all.click&vd_source=617dcf7ed08ed9625bdfcadc93c4fac7

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/404984.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

rider 缺少iisexpress

File C:/Program Files (x86)/IIS Express/iisexpress.exe doesn’t exist iisexpress下载 64位系统只能安装64位&#xff0c;32位系统安装32位 安装完成之后就有了

MacBook的nginx出现13: Permission denied 的问题分析和解决办法

同样的项目代码&#xff0c;电脑从Windows更换到了MacBook&#xff0c;发现网站的样式都没有了&#xff0c;直接访问CSS文件 http://crm.ms-test.cc/toolstatic/css/bootstrap.min.css 发现无法访问。查看Nginx错误日志&#xff1a; 说明是nginx没有权限访问这个CSS文件&#…

NDK的log.h使用__android_log_print报错app:buildCMakeDebug[x86_64]

org.gradle.api.tasks.TaskExecutionException: Execution failed for task :app:buildCMakeDebug[x86_64] 重点是 Execution failed for task :app:buildCMakeDebug[x86_64]. 我的代码&#xff1a; #include <android/log.h> #define LOG_TAG "MyJNI" #d…

20240113----重返学习-`nginx/conf/nginx.conf`的https证书配置说明

20240113----重返学习-nginx/conf/nginx.conf的https证书配置说明 文件说明 不同域名的多虚拟主机配置 server {listen 443 ssl;#在443端口上监听SSL/TLS流量;server_name localhost;#指定服务器名称&#xff0c;应该与域名匹配;ssl_certificate fangchaoduan.com.pem;#指定SS…

Linux之ACL权限管理

文章目录 1.ACL权限介绍二、操作步骤1. 添加测试目录、用户、组&#xff0c;并将用户添加到组2. 修改目录的所有者和所属组3. 设定权限4. 为临时用户分配权限5. 验证acl权限6. 控制组的acl权限 1.ACL权限介绍 每个项目成员有一个自己的项目目录&#xff0c;对自己的目录有完全…

DSL Query基本语法

DSL Query基本语法 查询的基本语法如下&#xff1a; GET /indexName/_search {"query":{"查询类型":{"查询条件":"条件值"}} }查询所有 GET /indexName/_search {"query":{"match_all":{}} }match查询&#xf…

【高德地图】Android高德地图绘制标记点Marker

&#x1f4d6;第4章 Android高德地图绘制标记点Marker ✅绘制默认 Marker✅绘制多个Marker✅绘制自定义 Marker✅Marker点击事件✅Marker动画效果✅Marker拖拽事件✅绘制默认 Infowindow&#x1f6a9;隐藏InfoWindow 弹框 ✅绘制自定义 InfoWindow&#x1f6a9;实现 InfoWindow…

MyBatis之Mapper.xml文件中parameterType,resultType,resultMap的用法

MyBatis之自定义数据类型转换器 前言1.parameterType2.resultType3.resultMap实例代码总结 前言 今天我们来学习Mapper.xml&#xff08;编写SQL的&#xff09;文件中&#xff0c;增删改查标签中&#xff0c;使用parameterType属性指定传递参数类型&#xff0c;resultType属性指…

人工智能_CPU微调ChatGLM大模型_使用P-Tuning v2进行大模型微调_007_微调_002---人工智能工作笔记0102

这里我们先试着训练一下,我们用官方提供的训练数据进行训练. 也没有说使用CPU可以进行微调,但是我们先执行一下试试: https://www.heywhale.com/mw/project/6436d82948f7da1fee2be59e 可以看到说INT4量化级别最低需要7GB显存可以启动微调,但是 并没有说CPU可以进行微调.我们…

日本极致产品力 | 如何在三得利等巨头压制下,打造出1秒麦1瓶的矿泉水品牌?

《极致产品力》日本深度研学,可以帮企业找产品、找方向、找方法,在日本终端市场考察中洞悉热销产品背后的成功逻辑,了解最新最前沿的产品趋势和机会。结合日本消费趋势中国转化的众多经验从品牌、包装、卖点、技术和生产工艺等多方面寻找中国市场的解决方案。 Nomusilica(又称诺…

springboot214基于springboot的多媒体素材库的开发与应用

多媒体素材库的设计与实现 摘要 近年来&#xff0c;信息化管理行业的不断兴起&#xff0c;使得人们的日常生活越来越离不开计算机和互联网技术。首先&#xff0c;根据收集到的用户需求分析&#xff0c;对设计系统有一个初步的认识与了解&#xff0c;确定多媒体素材库的总体功…

Unity之PUN2插件实现多人联机射击游戏

目录 &#x1f4d6;一、准备工作 &#x1f4fa;二、UI界面处理 &#x1f4f1;2.1 登录UI并连接PUN2服务器 &#x1f4f1;2.2 游戏大厅界面UI &#x1f4f1;2.3 创建房间UI &#x1f4f1;2.4 进入房间UI &#x1f4f1;2.5 玩家准备状态 &#x1f4f1;2.6 加载战斗场景…

PBM模型学习

本专栏着重讲解PBM学习所得&#xff0c;学习笔记、心得&#xff0c;并附有视频素材资料&#xff0c;视频详细目录如下&#xff1a; PBM相关参数解释1 PBM相关参数解释2 PBM相关案例实践1 PBM相关案例实践2 PBM相关案例实践2 PBM相关案例实践3 PBM多相流中次相界面设置1 PBM多相…

高级语言期末2012级B卷

1.编写函数&#xff0c;输出任意正整数n的位数&#xff08;n默认为存储十进制的整形变量&#xff09; 例如&#xff1a;正整数13&#xff0c;则输出2,&#xff1b;正整数3088&#xff0c;则输出4 #include <stdio.h>int func(int n) {int count0;while(n>0) {n/10;co…

区块链与Solidity详细介绍及基本语法使用

一、区块链简介 区块链是一种分布式数据库技术&#xff0c;它以块的形式存储数据&#xff0c;并通过加密算法确保数据的安全性。每个块包含一系列交易&#xff0c;并通过哈希值与前一个块相连接&#xff0c;形成一个链式结构。这种结构使得数据难以被篡改&#xff0c;因为任何对…

js设计模式:组合模式

作用: 可以用来将数据组合成树形的数据,可以像操作单独的对象一样去操作整个树形结构 树是相对复杂的数据,使用组合模式去封装树形的组件,是很重要的,可以对外暴露很多树的操作方法 示例: //一个树型的对象数据class Organ {constructor(label, value, parentName) {this.la…

【MySQL】数据库概述

目录 一、为什么使用数据库&#xff1f; 二、数据库与数据库管理系统 2.1 相关概念 2.2 两者关系 三、 MySQL介绍 四、 RDBMS和非RDBMS 4.1 关系型数据库&#xff08;RDBMS&#xff09; 4.2 非关系型数据库&#xff08;非RDBMS&#xff09; 五、关系型数据库设计规则 …

OCPP 1.6 接入实现文档

一、简介 OCPP&#xff08;Open Charge Point Protocol&#xff09;是一个开放的通信协议&#xff0c;用于充电站&#xff08;Charge Point&#xff09;与中央系统&#xff08;Central System&#xff0c;如充电站管理系统或服务提供商平台&#xff09;之间的通讯。本篇文档将…

Matlab论文插图绘制模板第137期—极坐标分组气泡图

在之前的文章中&#xff0c;分享了Matlab极坐标气泡图的绘制模板&#xff1a; 进一步&#xff0c;再来分享一下极坐标分组气泡图。 先来看一下成品效果&#xff1a; ​ 特别提示&#xff1a;本期内容『数据代码』已上传资源群中&#xff0c;加群的朋友请自行下载。有需要的朋…

有哪些适合程序员的副业

如果你经常玩知乎、看公众号&#xff08;软件、工具、互联网这几类的&#xff09;你就会发现&#xff0c;好多资源连接都变成了夸克网盘、迅雷网盘的资源链接。 例如&#xff1a;天涯神贴&#xff0c;基本上全是夸克、UC、迅雷网盘的资源链接。 有资源的前提下&#xff0c;迅雷…
最新文章