C语言练习百题之求100之内的素数

题目:求100之内的素数。

求解100以内的素数是一个常见的编程任务。素数是大于1且只能被1和自身整除的整数。我们将使用三种常见的方法来解决这个问题:穷举法、埃拉托斯特尼筛法和优化的埃拉托斯特尼筛法。

方法1: 穷举法

解题思路:
  • 从2开始遍历每个数,对每个数判断是否为素数,判断方法是看是否能被比它小的数整除。
  • 如果不能被任何比它小的数整除,则它是素数。
实现代码:
#include <stdio.h>
#include <stdbool.h>bool is_prime(int num) {if (num < 2)return false;for (int i = 2; i < num; i++) {if (num % i == 0)return false;}return true;
}void print_primes(int limit) {for (int i = 2; i <= limit; i++) {if (is_prime(i))printf("%d ", i);}
}int main() {int limit = 100;printf("Prime numbers up to %d:\n", limit);print_primes(limit);return 0;
}
优缺点:
  • 优点:
    • 算法简单,容易理解和实现。
  • 缺点:
    • 效率较低,时间复杂度为O(n^2)。

方法2: 埃拉托斯特尼筛法

解题思路:
  • 初始化一个布尔数组表示每个数是否为素数,初始所有数为素数。
  • 从2开始,将所有的倍数标记为非素数。
  • 最终剩下的未标记的数就是素数。
实现代码:
#include <stdio.h>
#include <stdbool.h>void sieve_of_eratosthenes(int limit) {bool is_prime[limit + 1];for (int i = 0; i <= limit; i++)is_prime[i] = true;for (int p = 2; p * p <= limit; p++) {if (is_prime[p]) {for (int i = p * p; i <= limit; i += p)is_prime[i] = false;}}printf("Prime numbers up to %d:\n", limit);for (int i = 2; i <= limit; i++) {if (is_prime[i])printf("%d ", i);}
}int main() {int limit = 100;sieve_of_eratosthenes(limit);return 0;
}
优缺点:
  • 优点:
    • 算法效率较高,时间复杂度为O(n log log n)。
  • 缺点:
    • 占用较多内存,空间复杂度为O(n)。

方法3: 优化的埃拉托斯特尼筛法

解题思路:
  • 优化埃拉托斯特尼筛法,对每个素数的倍数进行标记时,从该素数的平方开始标记,而不是从素数的倍数开始。
实现代码:
#include <stdio.h>
#include <stdbool.h>void optimized_sieve_of_eratosthenes(int limit) {bool is_prime[limit + 1];for (int i = 0; i <= limit; i++)is_prime[i] = true;for (int p = 2; p * p <= limit; p++) {if (is_prime[p]) {for (int i = p * p; i <= limit; i += p)is_prime[i] = false;}}printf("Prime numbers up to %d:\n", limit);for (int i = 2; i <= limit; i++) {if (is_prime[i])printf("%d ", i);}
}int main() {int limit = 100;optimized_sieve_of_eratosthenes(limit);return 0;
}
优缺点:
  • 优点:
    • 算法效率高,时间复杂度为O(n log log n)。
    • 占用较少内存,空间复杂度为O(n)。
  • 缺点:
    • 需要理解和实现的优化较多,相对于简单埃拉托斯特尼筛法更复杂。

总结和推荐

  • 推荐的方法: 优化的埃拉托斯特尼筛法
  • 优化的埃拉托斯特尼筛法综合了效率和空间复杂度的优点,是求解素数的较好选择。
  • 穷举法简单但效率低,不适用于大规模数据。
  • 埃拉托斯特尼筛法是常用且高效的方法,占用较多内存。
  • 优化的埃拉托斯特尼筛法在效率和内存占用上进行了平衡,是常用且推荐的方法。

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

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

相关文章

K8S:配置资源管理 Secret和configMap

文章目录 一.Secret1.Secret概念2.Secret的类型①kubernetes.io/service-account-token②opaque③kubernetes.io/dockerconfigjson④kubernetes.io/tls 3.secret的三种参数①tls②docker-registry③generic 4.Pod 的3种方式来使用secret5.Secret创建及案例&#xff08;1&#x…

算法题:柠檬水找零

这道题就是纯贪心算法题&#xff0c;遍历每个顾客&#xff0c;先把钱收了&#xff0c;如果是10块钱就判断手里头有没有5元用于找零&#xff1b;如果是20块钱&#xff0c;先判断是不是有10元5元&#xff0c;如果没有就再判断是否有3个5元。没有的话就直接返回 False。(完整题目附…

模型压缩部署概述

模型压缩部署概述 一&#xff0c;模型在线部署 1.1&#xff0c;深度学习项目开发流程 1.2&#xff0c;模型训练和推理的不同 二&#xff0c;手机端CPU推理框架的优化 三&#xff0c;不同硬件平台量化方式总结 参考资料 一&#xff0c;模型在线部署 深度学习和计算机视觉…

excel中将一个sheet表根据条件分成多个sheet表

有如下excel表&#xff0c;要求&#xff1a;按月份将每月的情况放在一个sheet中。 目测有6个月&#xff0c;就应该有6个sheet&#xff0c;每个sheet中体现本月的情况。 一、首先增加一个辅助列&#xff0c;月份&#xff0c;使用month函数即可。 填充此列所有。然后复制【月份】…

QT内存管理

Qt的半自动化的内存管理 &#xff08;1&#xff09;QObject及其派生类的对象&#xff0c;如果其parent非0&#xff0c;那么其parent析构时会析构该对象。 &#xff08;2&#xff09;QWidget及其派生类的对象&#xff0c;可以设置 Qt::WA_DeleteOnClose 标志位(当close时会析构…

代码随想录算法训练营第23期day14|二叉树层序遍历、226.翻转二叉树、101. 对称二叉树

目录 一、二叉树层序遍历 非递归法 递归法 相关题目&#xff08;10题&#xff09; 二、&#xff08;leetcode 226&#xff09;翻转二叉树 递归法 层序遍历 深度优先遍历 1&#xff09;非统一写法——前序遍历 2&#xff09; 统一写法——前序遍历 三、&#xff08;le…

C++设计模式-享元(Flyweight)

目录 C设计模式-享元&#xff08;Flyweight&#xff09; 一、意图 二、适用性 三、结构 四、参与者 五、代码 C设计模式-享元&#xff08;Flyweight&#xff09; 一、意图 运用共享技术有效地支持大量细粒度的对象。 二、适用性 一个应用程序使用了大量的对象。完全由…

十一工具箱流量主小程序源码

无授权&#xff0c;去过滤机制版本 看到网上发布的都是要授权的 朋友叫我把他去授权&#xff0c;能用就行 就把过滤去了 这样就不用授权 可以免费使用 白嫖党专属 一切接口可用&#xff0c;无需担心不能用 授权者不关站一直可以用 源码下载&#xff1a;https://download.csdn.…

抄写Linux源码(Day19:读取硬盘前的准备工作有哪些?)

回忆我们需要做的事情&#xff1a; 为了支持 shell 程序的执行&#xff0c;我们需要提供&#xff1a; 1.缺页中断(不理解为什么要这个东西&#xff0c;只是闪客说需要&#xff0c;后边再说) 2.硬盘驱动、文件系统 (shell程序一开始是存放在磁盘里的&#xff0c;所以需要这两个东…

在WIN10平台上体验Microsoft古老的Quick C 1.0编程

前言&#xff1a; 90年代初&#xff0c;微软出了Quick系统对抗Borland Turbo系列&#xff0c;其中包括 QuickBasic, QuickPascal和Quick C。1991年&#xff0c;Quick C for Windows 1.0发布&#xff0c;后来它被Visual C取代。我自己觉得微软成就在那个winstub.exe桩上&#xf…

Connect to 127.0.0.1:1080 [/127.0.0.1] failed: Connection refused: connect

报错信息 A problem occurred configuring root project CourseSelection. > Could not resolve all artifacts for configuration :classpath.> Could not resolve com.android.tools.build:gradle:3.6.1.Required by:project :> Could not resolve com.android.tool…

【数据库——MySQL】(14)过程式对象程序设计——游标、触发器

目录 1. 游标1.1 声明游标1.2 打开游标1.3 读取游标1.4 关闭游标1.5 游标示例 2. 触发器2.1 创建触发器2.2 修改触发器2.3 删除触发器2.4 触发器类型2.5 触发器示例 参考书籍 1. 游标 游标一般和存储过程一起配合使用。 1.1 声明游标 要使用游标&#xff0c;需要用到 DECLAR…

C++:继承

本文主要从 继承的概念及定义 、基类和派生类对象赋值转换、继承中的作用域、派生类的默认成员函数、继承与友元、继承与静态成员 、复杂的菱形继承及菱形虚拟继承 、继承的总结和反思 方面介绍继承。 目录 一、继承的概念及定义 1.继承的概念 2.继承定义 1.定义格式 2.继…

抄写Linux源码(Day17:你的键盘是什么时候生效的?)

回忆我们需要做的事情&#xff1a; 为了支持 shell 程序的执行&#xff0c;我们需要提供&#xff1a; 1.缺页中断(不理解为什么要这个东西&#xff0c;只是闪客说需要&#xff0c;后边再说) 2.硬盘驱动、文件系统 (shell程序一开始是存放在磁盘里的&#xff0c;所以需要这两个东…

用IDEA操作数据库--MySQL

IDEA集成了DataGrip的操作数据库的功能 就可以省略我们下载SQLyog/Navicat/DataGrip这些图形化操作工具了 以下是IDEA的使用 输入数据库的用户和密码

软件测试|Python自动化测试实现的思路

Python自动化测试常用于Web应用、移动应用、桌面应用等的测试 Python自动化实现思路通常分为以下几步&#xff1a; 1. 确定自动化测试的范围和目标&#xff1a; 首先需要明确需要进行自动化测试的范围和目标&#xff0c;包括测试场景、测试用例、测试数据等。 2. 选择自动化…

力扣第101题 c++ 递归 迭代 双方法 +注释 ~

题目 101. 对称二叉树 简单 给你一个二叉树的根节点 root &#xff0c; 检查它是否轴对称。 示例 1&#xff1a; 输入&#xff1a;root [1,2,2,3,4,4,3] 输出&#xff1a;true示例 2&#xff1a; 输入&#xff1a;root [1,2,2,null,3,null,3] 输出&#xff1a;false提示&a…

【2023年11月第四版教材】第19章《配置与变更管理》(合集篇)

第19章《配置与变更管理》&#xff08;合集篇&#xff09; 1 章节内容2 配置管理3 变更管理4 项目文档管理 1 章节内容 【本章分值预测】本章内容90%和第三版教材内容一样的&#xff0c;少部分有一些变化&#xff0c;特别是变更涉及的人员及职责&#xff0c;预计选择题考3分&a…

卷积网络的发展历史-LeNet

简介 LeNet是CNN结构的开山鼻祖&#xff0c;第一次定义了卷积神经网络的结构。 LeNet模型包含了多个卷积层和池化层&#xff0c;以及最后的全连接层用于分类。其中&#xff0c;每个卷积层都包含了一个卷积操作和一个非线性激活函数&#xff0c;用于提取输入图像的特征。池化层…

Python基本功

任何工作&#xff0c;没别的&#xff0c;就是苦练基本功&#xff0c;在篮球场上&#xff0c;我常用非常简单的基本功就可以克敌制胜&#xff0c;工作中也是如此 字符串 1&#xff1a;字符串拼接 a"人民" b123 print("我是"a""str(b))2&#x…