线性筛(欧拉筛)C语言

这篇具有很好参考价值的文章主要介绍了线性筛(欧拉筛)C语言。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言
线性筛是一种用于找出小于等于给定数值的所有质数的高效算法。它是一种改进版的埃拉托斯特尼筛法,可以在更短的时间内计算出大量的质数。其有时间复杂度低,空间复杂度低,可扩展性强的优点。今天我们就来给大家讲解线性筛的实现。话不多说,我们现在开始!
线性筛(欧拉筛)C语言,c语言学习,算法专栏,c语言,开发语言,算法

原理

任何除1外的自然数都可以被质数整除,这是因为若它不含有1和本身以外的因子,则它是质数,被自身整除,否则对其1和本身以外的因子进行同样讨论,即可证明它含有素因子。也就是说我们要判定一个数是不是质数就找出它的的最小质因子,如果最小质因子等于它本身,那么它就是质数。反之它就不是质数。
就拿质数2举例,它的倍数除了2以外全都不是质数。

实现

首先我们要先创建一个数组minp用来储存每个数的最小质因子,然后在创建一个数组prime用来储存质数。我们需要从2到n(指定的数)范围内筛选出来质数,同时求出各个数的最小质因子,我们刚才得知2的倍数的最小质因子全都是2,3的倍数的最小质因子也同样是3,也就是说我们可以通过循环把minp[质数的倍数]的值全部变为该质数的值,这时候我们可能会发现有些会问题,比如6是2的倍数也是3的倍数。那么遍历后它的最小质因子不就变成3而不是2了么?没错是这样的,所以我们需要有这样一句判断如果这个数模上现在遍历到质数等于0我们就停止循环,或者当这个数的最小质因子等于目前遍历到的质数时就停止循环,这样就可以解决刚才的问题(这句话最好看着代码读不然不好理解)。那么我们上代码!

#include<stdio.h>
int main()
{
	int prime[100] = { 0 };//质数
	int minp[101] = { 0 };//最小质因子
	int cnt = 0;
	for (int i = 2; i <= 100; ++i)
	{
		if (minp[i] == 0)
	   {
			minp[i] = i;
			prime[cnt++] = i;
       }
		for (int j = 0; j < cnt; ++j)
		{
			int p = prime[j];
			if (i * p > 100)
				break;
			minp[i * p] = p;
			if (minp[i] == p)
				break;
			//if(i%p==0) //用这个也可以
			//break;
		}
	}
	for (int i = 0; i < cnt; i++)
		printf("%d ", prime[i]);
	return 0;
}

尾声

今天的线性筛算法就介绍到这里,如果觉得博主讲的不错的话请给博主一个关注,点赞,收藏。博主还将持续分享知识,我们下期再见!文章来源地址https://www.toymoban.com/news/detail-765883.html

到了这里,关于线性筛(欧拉筛)C语言的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • HarmonyOS学习 -- ArkTS开发语言入门

    ArkTS是HarmonyOS主力应用开发语言。它在TypeScript(简称TS)的基础上,匹配ArkUI框架,扩展了声明式UI、状态管理等相应的能力,让开发者以更简洁、更自然的方式开发跨端应用。 JavaScript是一种属于网络的高级脚本语言,已经被广泛应用开发,常用来为网页添加各式各样的动态

    2024年02月08日
    浏览(56)
  • 【鸿蒙系统学习笔记】TypeScript开发语言

    HarmonyOS 应用的主要开发语言是 ArkTS,它由 TypeScript(简称TS)扩展而来,在继承TypeScript语法的基础上进行了一系列优化,使开发者能够以更简洁、更自然的方式开发应用。值得注意的是,TypeScript 本身也是由另一门语言 JavaScript 扩展而来。因此三者的关系如下图所示 2.1.1、线

    2024年02月19日
    浏览(43)
  • day4 驱动开发 c语言学习

    不利用系统提供的register_chrdev,自己实现字符设备的注册 底层代码 led.c 应用层代码 app.c 头文件 head.h

    2024年02月14日
    浏览(39)
  • 《算法导论》学习(十七)----动态规划之钢条切割(C语言)

    本文主要讲解了钢条切割问题的解决方案,并且给出了C语言代码。其中涉及到了动态规划的思想,会在之后的文章中详细讲解 Serling公司购买长钢条,将其切割成短钢条进行出售。切割工序本身没有成本支出。管理层希望得到最优的切割方法。 现在我们知道Serling公司出售一

    2023年04月23日
    浏览(45)
  • HarmonyOS学习路之方舟开发框架—学习ArkTS语言(基本语法 三)

    在开始之前,先明确自定义组件和页面的关系: 自定义组件: @Component 装饰的 UI 单元,可以组合多个系统组件实现 UI 的复用。 页面:即应用的 UI 页面。可以由一个或者多个自定义组件组成, @Entry 装饰的自定义组件为页面的入口组件,即页面的根节点,一个页面有且仅能有

    2024年02月16日
    浏览(63)
  • HarmonyOS学习路之方舟开发框架—学习ArkTS语言(基本语法 五)

    如果每个组件的样式都需要单独设置,在开发过程中会出现大量代码在进行重复样式设置,虽然可以复制粘贴,但为了代码简洁性和后续方便维护,我们推出了可以提炼公共样式进行复用的装饰器@Styles。 @Styles装饰器可以将多条样式设置提炼成一个方法,直接在组件声明的位

    2024年02月17日
    浏览(56)
  • HarmonyOS学习路之方舟开发框架—学习ArkTS语言(基本语法 一)

    ArkTS是HarmonyOS优选的主力应用开发语言。ArkTS围绕应用开发在 TypeScript (简称 TS )生态基础上做了进一步扩展,继承了 TS 的所有特性,是 TS 的超集。因此,在学习 ArkTS 语言之前,建议开发者具备 TS 语言开发能力。 当前, ArkTS 在 TS 的基础上主要扩展了如下能力: 基本语法:

    2024年02月16日
    浏览(70)
  • HarmonyOS学习路之方舟开发框架—学习ArkTS语言(状态管理 六)

    AppStorage是应用全局的UI状态存储,是和应用的进程绑定的,由UI框架在应用程序启动时创建,为应用程序UI状态属性提供中央存储。 和LocalStorage不同的是,LocalStorage是页面级的,通常应用于页面内的数据共享。而对于AppStorage,是应用级的全局状态共享。 AppStorage是在应用启动

    2024年02月20日
    浏览(54)
  • HarmonyOS学习路之方舟开发框架—学习ArkTS语言(状态管理 二)

    @Prop装饰的变量可以和父组件建立单向的同步关系。@Prop装饰的变量是可变的,但是变化不会同步回其父组件。 @Prop装饰的变量和父组件建立单向的同步关系: @Prop变量允许在本地修改,但修改后的变化不会同步回父组件。 当父组件中的数据源更改时,与之相关的@Prop装饰的变

    2024年02月14日
    浏览(48)
  • HarmonyOS学习路之方舟开发框架—学习ArkTS语言(基本语法 二)

    在ArkUI中,UI显示的内容均为组件,由框架直接提供的称为系统组件,由开发者定义的称为自定义组件。在进行 UI 界面开发时,通常不是简单的将系统组件进行组合使用,而是需要考虑代码可复用性、业务逻辑与UI分离,后续版本演进等因素。因此,将UI和部分业务逻辑封装成

    2024年02月04日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包