埃拉托斯特尼筛法,厄拉多塞筛算法,C#实现

news2024/11/25 16:40:52

埃拉托斯特尼筛法,厄拉多塞筛算法

这个 很多地方的定义不一样。
虽然名字相同,但是具体的定义还是有差距。

有的地方描述的是:
厄拉多塞筛算法(Eratosthenes Sieve)是一种求素数的方法,由古希腊数学家厄拉多塞提出。它的原理是,给定一个数n,从2开始依次将根号n以内的素数的倍数标记为合数,标记完成后,剩余未被标记的数为素数(从2开始)。如此可省去检查每个数的步骤,使筛选素数的过程更加简单。厄拉多塞筛算法具体步骤如下:
(1)读取输入的数n,将2至n的所有整数记录在表中:
(2)从2开始,划去表中所有2的倍数;
(3)由小到大寻找表中下一个未被划去的整数,再划去表中所有该整数的倍数;
(4)重复第(3)步,直到找到的整数大于根号n为止;
(5)表中所有未被划去的整数均为素数。
在这里插入图片描述

差距就是有的是根号N,有的是N。

下面实现的是没有根号的版本。

C# 实现

            var ll = SieveOfEratosthenes(10);
            ll.ForEach(e => { Console.WriteLine(e); });

        /// <summary>
        /// 埃拉托斯特尼筛法
        /// </summary>
        /// <param name="maxValue">最大值</param>
        /// <returns>符合条件的素数集合</returns>
        private static List<int> SieveOfEratosthenes(int maxValue)
        {
            List<bool> bl_list = new List<bool>();
            List<int> int_list = new List<int>();

            // 初始化 bl_list,默认值为 false(表示是质数)
            for (int i = 0; i < maxValue + 1; i++)
            {
                bl_list.Add(false);
            }

            // 0 和 1 不是质数
            bl_list[0] = true;
            bl_list[1] = true;

            // 开始筛选
            for (int i = 2; i * i <= maxValue; i++)
            {
                if (!bl_list[i])
                {
                    for (int j = i * i; j <= maxValue; j += i)
                    {
                        bl_list[j] = true; // 标记为非质数
                    }
                }
            }

            // 收集所有质数
            for (int i = 2; i <= maxValue; i++)
            {
                if (!bl_list[i])
                {
                    int_list.Add(i);
                }
            }

            // 打印结果(可选)
            for (int i = 0; i < bl_list.Count; i++)
            {
                Console.WriteLine($"i={i}:" + bl_list[i]);
            }

            return int_list;
        }

输出:

i=0:True
i=1:True
i=2:False
i=3:False
i=4:True
i=5:False
i=6:True
i=7:False
i=8:True
i=9:True
i=10:True
2
3
5
7

C++实现

 #include <iostream>
#include <vector>

std::vector<int> SieveOfEratosthenes(int maxValue) {
    std::vector<bool> bl_list(maxValue + 1, false); // 初始化 bl_list,默认值为 false(表示是质数)
    std::vector<int> int_list;

    // 0 和 1 不是质数
    bl_list[0] = true;
    bl_list[1] = true;

    // 开始筛选
    for (int i = 2; i * i <= maxValue; i++) {
        if (!bl_list[i]) {
            for (int j = i * i; j <= maxValue; j += i) {
                bl_list[j] = true; // 标记为非质数
            }
        }
    }

    // 收集所有质数
    for (int i = 2; i <= maxValue; i++) {
        if (!bl_list[i]) {
            int_list.push_back(i);
        }
    }

    // 打印结果(可选)
    for (int i = 0; i < bl_list.size(); i++) {
        std::cout << "i=" << i << ":" << bl_list[i] << std::endl;
    }

    return int_list;
}

int main() {
    int maxValue = 10; //查找10以内的 
    std::vector<int> primes = SieveOfEratosthenes(maxValue);

    std::cout << "Prime numbers up to " << maxValue << " are: ";
    for (int prime : primes) {
        std::cout << prime << " ";
    }
    std::cout << std::endl;

    return 0;
}

输出:

i=01
i=11
i=20
i=30
i=41
i=50
i=61
i=70
i=81
i=91
i=101
Prime numbers up to 10 are: 2 3 5 7 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何下载学术论文、专利(最全)——包含免费方法

经常有同学问&#xff0c;如何下载论文 一、中文论文 万方&#xff08;在校生一般学校已购买权限&#xff0c;具体可看自己学校图书馆&#xff09; 网址&#xff1a;https://www.wanfangdata.com.cn/ 2. 知网&#xff08;在校生一般学校已购买权限&#xff0c;具体可看自己学…

【ML】transform 之 encode 及其实现细节

transform 之 encode 及其实现细节 1. transform (seq2seq) 是什么2. transform (seq2seq) 具体如何实现3. transform (seq2seq) 可以解决哪些类型的问题4. 补充问题4.1 残差连接&#xff08;Residual Connection&#xff09;是什么如何实现4.1.2 残差连接的具体实现&#xff1…

一文搞懂后端面试之MySQL MVCC【中间件 | 数据库 | MySQL | 隔离级别 | Read View】

为什么需要MVCC 锁本身就是用于并发控制的&#xff0c;那么为什么InnoDB还要引入MVCC&#xff0c;读写都加锁不就可以控制住并发吗&#xff1f; 锁确实可以&#xff0c;但是性能太差。如果是纯粹的锁&#xff0c;那么写和写、读和写、读和读之间都是互斥的。如果是读写锁&…

C#TreeView控件应用

1、代码 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms;namespace TestApp…

两数之和 II(LeetCode)

题目 给你一个下标从 1 开始的整数数组 &#xff0c;该数组已按 非递减顺序排列 &#xff0c;请你从数组中找出满足相加之和等于目标数 的两个数。 如果设这两个数分别是 和 &#xff0c;则 。 以长度为 的整数数组 形式返回这两个整数的下标 和 。 你可以假设每个输入…

【从零开始一步步学习VSOA开发】并行RPC服务端

并行RPC服务端 概念 之前 RPC 使用方式中的所有回调函数都是串行执行的&#xff0c;VSOA 为 C 语言开发版本提供了并行处理 RPC 请求的功能&#xff0c;开发者可以通过并发 RPC 相关接口创建线程池并行处理 RPC 请求。并发服务模式通过多线程来实现&#xff0c;能有效提高响应…

8.06 C++作业

使用类定义实现隔离储存计算 1.头文件 #ifndef CLASS_H #define CLASS_H #include <iostream> using namespace std;class rect { private:int width;int height; public:void init(int width,int height);void show();void setw(int w);void seth(int h); };#endif //…

gradle安装及配置

文章目录 一、下载安装包二、解压文件三、环境变量配置四、验证安装结果五、配置国内源六、IDEA配置 一、下载安装包 从gradle官网下载安装包&#xff0c;官网地址为&#xff1a;https://gradle.org/releases/ 我们只需要下载编译好的文件即可。 二、解压文件 解压文件到指定…

睡前故事—星际旅行者

文章目录 欢迎来到《Bedtime Stories Time》。这是一个我们倾听、放松、并逐渐入睡的播客。感谢你收听并支持我们&#xff0c;希望你能将这个播客作为你睡前例行活动的一部分。今晚我们将讲述《星际旅行者》的故事。一个宁静的夜晚&#xff0c;希望你现在已经感到平静、放松&am…

PXE的使用

配置前提 1、挂载镜像源&#xff0c;可正常下载软件 [rootredhat-7 ~]# mkdir -p /rhel7 ----创建挂载点目录 [rootredhat-7 ~]# mount /dev/sr0 /rhel7/ ----挂载镜像源至挂载点&#xff08;临时挂载&#xff0c;重启失效&#xff09;[rootredhat-7 ~]# vim /etc/yum.repos.…

[CR]厚云填补_GridDehazeNet+

GridDehazeNet: An Enhanced Multi-Scale Network With Intra-Task Knowledge Transfer for Single Image Dehazing Abstract 雾霾等恶劣天气条件会降低自动驾驶和智能交通系统的性能。作为一种潜在的补救措施&#xff0c;我们提出了一种增强的多尺度网络&#xff0c;称为GridD…

鸿蒙(API 12 Beta2版)媒体开发【使用AudioRenderer开发音频播放功能】

音频播放开发概述 如何选择音频播放开发方式 系统提供了多样化的API&#xff0c;来帮助开发者完成音频播放的开发&#xff0c;不同的API适用于不同音频数据格式、音频资源来源、音频使用场景&#xff0c;甚至是不同开发语言。因此&#xff0c;选择合适的音频播放API&#xff…

conda pack迁移环境

文章目录 下载conda pack打包已有环境还原环境 因为有的服务器没有网络&#xff0c;如果想要安装自己的虚拟环境&#xff0c;就需要在有网络的服务器安装好环境后迁移到没有网络的服务器。conda-pack是一个命令行工具&#xff0c;用于打包 conda 环境&#xff0c;pip inatall和…

【Python实战】完美实现 WPS 会员功能,自动化处理 PDF 文档(建议收藏)

数字化办公已成常态&#xff0c;文档管理和处理是很多小伙伴的日常工作。 PDF&#xff08;Portable Document Format&#xff09;文档因其跨平台兼容性和格式固定性而备受青睐。 然而&#xff0c;对于非WPS会员用户而言&#xff0c;一些高级功能如批量处理、格式转换、添加水…

【SpringMVC】详细介绍SpringMVC的执行流程

目录 1. 概念 2.SpringMVC工作原理 3. springMVC的简单使用 1.在pom.xml中导入相关依赖 2.在web.xml中配置dispatcherServlet 3.创建springMVC.xml核心配置文件 1. 概念 什么是MVC&#xff1f; MVC是下面三个组件的简写&#xff0c;模型&#xff08;Model&#xff09;、视图…

mathtype7永久激活密钥咋子哪里获取?2024最新破解版下载附安装教程

在数字化时代&#xff0c;我们每天都与文字和符号打交道。无论是撰写论文、准备报告还是编写程序&#xff0c;数学公式的输入都是不可或缺的一环。但你有没有遇到过这样的困扰&#xff1a;在Word文档中编辑复杂的数学公式时&#xff0c;操作繁琐且不直观&#xff1f; 别担心&a…

鸿蒙图形开发【3D引擎接口示例】

介绍 本实例主要介绍3D引擎提供的接口功能。提供了ohos.graphics.scene中接口的功能演示。 3D引擎渲染的画面会被显示在Component3D这一控件中。点击按钮触发不同的功能&#xff0c;用户可以观察渲染画面的改变。 效果预览 使用说明 在主界面&#xff0c;可以点击按钮进入不…

【书生大模型实战营第三期】基础岛 第1关 书生大模型全链路开源体系

欢迎大家参与第三期书生大模型实战营&#xff01;&#xff01;&#xff01; 1. 书生浦语开源历程 从23年7月开始&#xff0c;直到今年7月&#xff0c;书生浦语先后开源了 InternLM、InternLM2 核性能更好的 InternLM2.5。 2. InternLM2.5 的优势 其中&#xff0c;最新的 Intern…

计算机语言-CSP初赛知识点整理

历年真题 [2020-CSP-J-第2题] 编译器的主要功能( ) A. 将源程序翻译成机器指令代码 B. 将源程序重新组合 C. 将低级语言翻译成高级语言 D. 将一种高级语言翻译成另一种高级语言 [2021-CSP-J-第1题] 以下不属于面向对象程序设计语言的是&#xff08;&#xff09;。 A. C B. Pyt…

【读点论文】场景图像中文本检测和识别关键技术研究-博士学位论文

文本是人类获取信息及社会交流的重要手段&#xff0c;从图像准确读取文本对人类的生产生活至关重要。现有方法通常将文本读取细分为文本检测、文本识别、端到端文本识别三个子任务。其中文本检测的目的是定位出图像中文本的位置&#xff0c;文本识别旨在识别出文本区域的字符序…