首页 > 其他分享 >浅谈筛法——普通筛

浅谈筛法——普通筛

时间:2023-10-29 16:55:44浏览次数:52  
标签:return 浅谈 筛法 int 合数 普通 特判 因数 素数

前置知识-因数和倍数 (六年级及以上自行跳过)

\( n\div m=k \),我们就说\(n\)是\(m\)和\(k\)的倍数,\(m\)和\(k\)是\(n\)的倍数。简单来说就是这样的:
\(\text{被除数}\div\text{除数,余数为0}\),那我们就说除数是被除数的因数,被除数是除数的倍数。

前置知识-素数和合数 (六年级及以上自行跳过)

一个数的因数只有\(1\)和它本身,那这个数就是素数。

如:

\(2\)为素数,\(2\)的因数只有\(1\)和\(2\)。

\(4\)不是素数,他的因数有\(2\)。

自然数中(不包括负数,\(0\),\(1\)),不是素数就是合数。

注意:\(1\)不是素数,也不是合数。

本场主角-普通筛!

普通筛的思路:先特判\(1\)和\(2\),再枚举\(2\sim n-1\),如果\(n\)能整除\(i\),那么\(n\)是合数,如果扫完都不能被整除,那么\(n\)为素数。

接下来放上JCer最爱——代码:

bool is_prime(int n){//判断素数的函数 
	if(n==1){//特判1 
		return 0;//1不是素数,返回0 
	}
	if(n==2){//特判2
		return 1;//2不是素数,返回1
	}
	for(int i=2;i<n;i++){//从2~n-1枚举 
		if(n%i==0){//如果能被整除 
			return 0;//不是素数,返回0 
		}
	}
	return 1;//是素数,返回1 
}

不过这时间复杂度:\(O_{n}\)

面对数据范围很大的题目时……

所以,我们需要优化:

优化后的代码:

bool is_prime(int n){//判断素数的函数 
	if(n==1){//特判1 
		return 0;//1不是素数,返回0 
	}
	if(n==2){//特判2
		return 1;//2不是素数,返回1
	}
	for(int i=2;i*i<=n;i++){//枚举 
		if(n%i==0){//如果能被整除 
			return 0;//不是素数,返回0 
		}
	}
	return 1;//是素数,返回1 
}

时间复杂度:\(O_{\sqrt n}\)

原理:
素数是因子为\(1\)和本身, 如果\(num\)不是素数,则还有其他因子,其中的因子,假如为\(a,b\).其中必有一个大于\(\sqrt{num}\) ,一个小于\(\sqrt{num}\) 。所以必有一个小于或等于其平方根的因数,那么验证素数时就只需要验证到其平方根就可以了。即一个合数一定含有小于它平方根的质因子。

有了模板之后,我们就开始愉快的水题时间吧!

练1:P1304哥德巴赫猜想

练1:P1075质因数分解

标签:return,浅谈,筛法,int,合数,普通,特判,因数,素数
From: https://www.cnblogs.com/OIer-QAQ/p/17796044.html

相关文章

  • 浅谈UI自动化测试
    随着软件行业的不断发展,建立一个完善的自动化测试体系变得至关重要。目前,自动化测试主要涵盖接口自动化测试和UI自动化测试两个主要领域。就目前而言,企业在UI自动化测试方面的覆盖率仍然相对较低。接口自动化测试可以模拟和执行应用程序接口的各种操作,以验证接口的功能、性能和稳定......
  • 浅谈UI自动化测试
    随着软件行业的不断发展,建立一个完善的自动化测试体系变得至关重要。目前,自动化测试主要涵盖接口自动化测试和UI自动化测试两个主要领域。就目前而言,企业在UI自动化测试方面的覆盖率仍然相对较低。接口自动化测试可以模拟和执行应用程序接口的各种操作,以验证接口的功能、性能和稳......
  • maven创建普通java项目访问mysql-mybatis
    基础资料:数据库:d1,表:t1,字段:xm,nl(即姓名、年龄),内容('zs',20;'ls',18)以下内容由官网“https://mybatis.org/mybatis-3/zh/getting-started.html”整理而来。不尽不实之处请参考官网原文。思想:1、在pom.xml文件中除了给出mybatis和jdbc的依赖之外,还应给出资源(配置)文件位置。2、在my......
  • maven创建普通java项目访问mysql-仅jdbc
    已知:1、maven对普通Java项目的创建,参考 https://www.cnblogs.com/wanjinliu/p/17706089.html 。2、java常规访问mysql数据库,需要用到jdbc驱动。调用的jar包,最新为“mysql-connector-j”--这个名字可以不记得,看见能认识它就行。包、类入门用法,参考 https://www.cnblogs.com/......
  • 浅谈城市综合管廊运维的系统集成方案
    安科瑞电气股份有限公司:罗轩志摘要:从网络拓扑结构、开放式实时以太网协议、控制层系统配置方面介绍了综合管廊的系统网络架构设计,分析了无线网络特性,阐述了基于HTML5架构所能实现的功能的初步构想,以便于综合管廊运维人员巡检,确保管廊本体安全。0引言综合管廊的控制部分是保证综合......
  • 浅谈关于羚通智能分析平台通道管理和告警查询的使用功能
    ​上期我们知道了如何使用羚通智能分析平台,今天我们来详细了解一下羚通智能分析平台的通道管理和告警查询的使用功能。因为羚通智能分析平台主要是做视频算法分析的,所以我们今天来看一看羚通智能分析平台的通道管理和告警查询两个部分的使用情况如何。上一期,我们了解了一下......
  • linux虚拟机从超级用户返回普通用户
    按书上的操作来先输入whoami,回车,再输入su-,回车,再输入su用户名,回车,就切换到1普通用户了,但是经过我的实验,我发现并不需要那么复杂,我第一步实验是不输入whoami,直接到su-这一步,发现也可以实现切换到普通用户,但我还是觉得不够简洁,于是我进一步实验,只输入su用户名,发现就可以一步到位,......
  • 浅谈动态规划——01背包
    本文暂时不谈记忆化搜索先看例题P1048采药(其实就是个加了题目背景的01背包板子题)我知道你可能不想读题,所以我把题意写在这里了题意你总共有T的时间有n个物品,第i个物品的价值为w[i],拿走它消耗的时间为v[i],且每个物品只能拿一次计算出能拿取的物品的最大总价值我猜你会这......
  • 浅谈排序网络与并行排序算法
    对于普通的基于比较排序我们拥有一个复杂度下界\(O(n\logn)\),然而如果我们允许并行计算的话,将得到一些复杂度更优秀的计算方法。听到并行这个词许多人就会认为你有几个线程复杂度就除以几,所以线程堆得越多越好。但许多的算法问题都必须要满足你必须要算完A才能去计算B,比如对......
  • 浅谈go反射
    基本概念支持反射的语言可以在程序编译期将变量的反射信息,如字段名称、类型信息、结构体信息等整合到可执行文件中,并给程序提供接口访问反射信息,这样就可以在程序运行期获取类型的反射信息,并且有能力修改它们。Go语言提供了reflect包来访问程序的反射信息。Refelct解析Refel......