求100之内的素数-多语言

目录

C 语言实现

方法 1: 使用 for 循环

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

方法 3: 使用自定义判断素数 

Python 实现

方法 1: 使用自定义函数判断素数

 方法 2: 使用埃拉托斯特尼筛法(Sieve of Eratosthenes)

方法 3: 使用递归方法

Java 实现

方法 1: 使用自定义函数判断素数

方法 2:使用埃拉托斯特尼筛法(Sieve of Eratosthenes)

 方法 3:递归方法

方法 4: 使用 Java 8 的流(Streams)

Js 实现 

方法 1: 使用自定义函数判断素数

方法 2:埃拉托斯特尼筛法(Sieve of Eratosthenes)


题目:求100之内的素数。

程序分析:质数(prime number)又称素数,有无限个。一个大于1的自然数,除了1和它本身外,不能被其他自然数整除。

C 语言实现

方法 1: 使用 for 循环

#include <stdio.h>
#include <math.h>int main() {int i, j, k, n = 0; // 定义变量for (i = 2; i <= 100; i++) { // 遍历从 2 到 100 的每个整数k = (int)sqrt(i); // 计算 i 的平方根for (j = 2; j <= k; j++) // 检查 i 是否能被 2 到 k 之间的任何数整除if (i % j == 0) break; // 如果能整除,说明 i 不是素数,跳出内层循环if (j > k) { // 如果 j 超过 k,说明 i 是素数printf("%d ", i); // 打印素数n++; // 素数计数器加一if (n % 5 == 0) // 每打印 5 个素数换行printf("\n");}}return 0; // 程序结束
}
  • 该程序使用了简单的算法来检查每个数字是否为素数。
  • 它通过检查从 2 到该数字平方根的所有整数来判断一个数是否为素数。
  • 每找到 5 个素数就换行,以便输出格式更整齐。

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

  1. 使用更高效的素数检测算法:对于较大的范围,可以考虑使用埃拉托斯特尼筛法(Sieve of Eratosthenes)来生成素数,这样效率更高。
  2. 代码可读性:可以增加注释,或者将部分逻辑封装成函数,以提高代码的可读性和可维护性。
  3. 输出格式:可以在输出的最后添加换行符,以使输出更整洁。
#include <stdio.h>
#include <stdbool.h>#define MAX 100int main() {bool isPrime[MAX + 1]; // 创建一个布尔数组来标记素数for (int i = 0; i <= MAX; i++) {isPrime[i] = true; // 初始化所有数为素数}isPrime[0] = isPrime[1] = false; // 0 和 1 不是素数for (int i = 2; i * i <= MAX; i++) {if (isPrime[i]) {for (int j = i * i; j <= MAX; j += i) {isPrime[j] = false; // 标记 i 的倍数为非素数}}}int count = 0;for (int i = 2; i <= MAX; i++) {if (isPrime[i]) {printf("%d ", i);count++;if (count % 5 == 0) {printf("\n"); // 每打印 5 个素数换行}}}printf("\n"); // 最后换行return 0;
}
  • 这个改进后的版本使用了布尔数组 isPrime 来标记每个数字是否为素数。
  • 通过筛法,所有非素数的标记都被设置为 false,最终只输出标记为 true 的数字。
  • 这种方法在处理较大范围的素数时效率更高。

方法 3: 使用自定义判断素数 

#include <stdio.h>
#include <math.h>int isPrime(int num) {if (num < 2) return 0; // 0 和 1 不是素数if (num == 2) return 1; // 2 是素数if (num % 2 == 0) return 0; // 排除偶数for (int j = 3; j <= sqrt(num); j += 2) { // 只检查奇数if (num % j == 0) return 0; // 如果能被整除,返回 0}return 1; // 是素数
}int main() {int n = 0; // 素数计数器for (int i = 2; i <= 100; i++) {if (isPrime(i)) {printf("%d ", i);n++;if (n % 5 == 0) {printf("\n"); // 每打印 5 个素数换行}}}printf("\n"); // 最后换行return 0;
}

Python 实现

方法 1: 使用自定义函数判断素数

这个 Python 程序将打印 2 到 100 之间的所有素数

import mathdef is_prime(num):if num < 2:return Falsefor j in range(2, int(math.sqrt(num)) + 1):if num % j == 0:return Falsereturn Truedef main():n = 0  # 素数计数器for i in range(2, 101):  # 遍历从 2 到 100 的每个整数if is_prime(i):  # 检查 i 是否为素数print(i, end=' ')  # 打印素数n += 1  # 素数计数器加一if n % 5 == 0:  # 每打印 5 个素数换行print()  # 换行print()  # 最后换行if __name__ == "__main__":main()  # 调用主函数
  1. 导入模块:使用 import math 来导入数学模块,以便使用 math.sqrt() 函数计算平方根。
  2. is_prime 函数:这个函数用于检查一个数字是否为素数。它返回 True 如果是素数,返回 False 如果不是。
  3. main 函数:这是程序的主函数,遍历从 2 到 100 的每个整数,调用 is_prime 函数来检查每个数字是否为素数。
  4. 打印素数:如果是素数,则打印该数字,并在每打印 5 个素数后换行。
  5. 程序入口:使用 if __name__ == "__main__": 来确保主函数在脚本直接运行时被调用。

 方法 2: 使用埃拉托斯特尼筛法(Sieve of Eratosthenes)

这种方法是生成素数的高效算法,适合处理较大的范围。

def sieve_of_eratosthenes(max_num):is_prime = [True] * (max_num + 1)  # 创建布尔数组is_prime[0] = is_prime[1] = False  # 0 和 1 不是素数for i in range(2, int(max_num**0.5) + 1):if is_prime[i]:for j in range(i * i, max_num + 1, i):is_prime[j] = False  # 标记 i 的倍数为非素数return [i for i in range(2, max_num + 1) if is_prime[i]]  # 返回素数列表def main():primes = sieve_of_eratosthenes(100)  # 获取 2 到 100 的素数for index, prime in enumerate(primes):print(prime, end=' ')if (index + 1) % 5 == 0:  # 每打印 5 个素数换行print()print()  # 最后换行if __name__ == "__main__":main()

方法 3: 使用递归方法

def is_prime(num, divisor=2):if num < 2:return Falseif divisor > int(num**0.5):return Trueif num % divisor == 0:return Falsereturn is_prime(num, divisor + 1)def main():for i in range(2, 101):if is_prime(i):print(i, end=' ')print()  # 最后换行if __name__ == "__main__":main()

Java 实现

方法 1: 使用自定义函数判断素数

这个 Java 程序将打印 2 到 100 之间的所有素数,功能与 C 代码相同。

public class PrimeNumbers {public static void main(String[] args) {int n = 0; // 素数计数器for (int i = 2; i <= 100; i++) { // 遍历从 2 到 100 的每个整数if (isPrime(i)) { // 检查 i 是否为素数System.out.print(i + " "); // 打印素数n++; // 素数计数器加一if (n % 5 == 0) { // 每打印 5 个素数换行System.out.println();}}}System.out.println(); // 最后换行}// 检查一个数是否为素数public static boolean isPrime(int num) {if (num < 2) return false; // 0 和 1 不是素数int k = (int) Math.sqrt(num); // 计算 num 的平方根for (int j = 2; j <= k; j++) { // 检查 num 是否能被 2 到 k 之间的任何数整除if (num % j == 0) return false; // 如果能整除,返回 false}return true; // 是素数}
}
  1. 主类:定义了一个名为 PrimeNumbers 的公共类。
  2. main 方法:程序的入口点,遍历从 2 到 100 的每个整数,调用 isPrime 方法来检查每个数字是否为素数。
  3. 打印素数:如果是素数,则打印该数字,并在每打印 5 个素数后换行。
  4. isPrime 方法:这个方法用于检查一个数字是否为素数。它返回 true 如果是素数,返回 false 如果不是。
  5. 平方根计算:使用 Math.sqrt() 方法计算平方根。

方法 2:使用埃拉托斯特尼筛法(Sieve of Eratosthenes)

这种方法是生成素数的高效算法,适合处理较大的范围。

public class PrimeNumbers {public static void main(String[] args) {int max = 100;boolean[] isPrime = new boolean[max + 1]; // 创建布尔数组for (int i = 2; i <= max; i++) {isPrime[i] = true; // 初始化所有数为素数}for (int i = 2; i * i <= max; i++) {if (isPrime[i]) {for (int j = i * i; j <= max; j += i) {isPrime[j] = false; // 标记 i 的倍数为非素数}}}int count = 0; // 素数计数器for (int i = 2; i <= max; i++) {if (isPrime[i]) {System.out.print(i + " "); // 打印素数count++;if (count % 5 == 0) {System.out.println(); // 每打印 5 个素数换行}}}System.out.println(); // 最后换行}
}

 方法 3:递归方法

public class PrimeNumbers {public static void main(String[] args) {for (int i = 2; i <= 100; i++) {if (isPrime(i, 2)) { // 检查 i 是否为素数System.out.print(i + " "); // 打印素数}}System.out.println(); // 最后换行}// 递归检查一个数是否为素数public static boolean isPrime(int num, int divisor) {if (num < 2) return false; // 0 和 1 不是素数if (divisor * divisor > num) return true; // 如果没有找到因数,返回 trueif (num % divisor == 0) return false; // 如果能整除,返回 falsereturn isPrime(num, divisor + 1); // 递归检查下一个因数}
}

方法 4: 使用 Java 8 的流(Streams)

利用 Java 8 的流特性来生成素数。

import java.util.stream.IntStream;public class PrimeNumbers {public static void main(String[] args) {IntStream.rangeClosed(2, 100) // 生成 2 到 100 的整数流.filter(PrimeNumbers::isPrime) // 过滤出素数.forEach(num -> System.out.print(num + " ")); // 打印素数System.out.println(); // 最后换行}// 检查一个数是否为素数public static boolean isPrime(int num) {if (num < 2) return false; // 0 和 1 不是素数return IntStream.rangeClosed(2, (int) Math.sqrt(num)) // 生成 2 到 sqrt(num) 的整数流.noneMatch(divisor -> num % divisor == 0); // 检查是否有因数}
}

Js 实现 

这个 JavaScript 程序将打印 2 到 100 之间的所有素数

方法 1: 使用自定义函数判断素数

function isPrime(num) {if (num < 2) return false; // 0 和 1 不是素数const k = Math.sqrt(num); // 计算 num 的平方根for (let j = 2; j <= k; j++) { // 检查 num 是否能被 2 到 k 之间的任何数整除if (num % j === 0) return false; // 如果能整除,返回 false}return true; // 是素数
}function main() {let n = 0; // 素数计数器for (let i = 2; i <= 100; i++) { // 遍历从 2 到 100 的每个整数if (isPrime(i)) { // 检查 i 是否为素数process.stdout.write(i + " "); // 打印素数n++; // 素数计数器加一if (n % 5 === 0) { // 每打印 5 个素数换行console.log();}}}console.log(); // 最后换行
}main(); // 调用主函数
  1. isPrime 函数:这个函数用于检查一个数字是否为素数。它返回 true 如果是素数,返回 false 如果不是。

    • 如果数字小于 2,返回 false
    • 计算数字的平方根,并检查从 2 到平方根之间的所有整数是否能整除该数字。
  2. main 函数:这是程序的主函数,遍历从 2 到 100 的每个整数,调用 isPrime 函数来检查每个数字是否为素数。

    • 如果是素数,则打印该数字,并在每打印 5 个素数后换行。
  3. process.stdout.write:用于在控制台上打印输出,而不自动换行。这样可以更好地控制输出格式。

  4. console.log():用于在最后输出一个换行符。

方法 2:埃拉托斯特尼筛法(Sieve of Eratosthenes)

function sieveOfEratosthenes(max) {const isPrime = Array(max + 1).fill(true); // 创建布尔数组isPrime[0] = isPrime[1] = false; // 0 和 1 不是素数for (let i = 2; i * i <= max; i++) {if (isPrime[i]) {for (let j = i * i; j <= max; j += i) {isPrime[j] = false; // 标记 i 的倍数为非素数}}}return isPrime.map((prime, index) => prime ? index : null).filter(Boolean); // 返回素数列表
}function main() {const primes = sieveOfEratosthenes(100); // 获取 2 到 100 的素数let n = 0; // 素数计数器primes.forEach(prime => {process.stdout.write(prime + " "); // 打印素数n++;if (n % 5 === 0) {console.log(); // 每打印 5 个素数换行}});console.log(); // 最后换行
}main(); // 调用主函数

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

蓝桥杯——递归

1、用递归实现阶乘 5*4*3*2*1120 package day3;public class Demo6 {public static void main(String[] args) {int result f(5);System.out.println(result);}private static int f(int i) {if(i1) {return 1;}return i * f(i-1);}}结果&#xff1a;120 2、爬楼梯 有一个楼…

Y20030012基于php+mysql的药店药品信息管理系统的设计与实现 源码 配置 文档

库存管理系统 1.摘要2. 系统功能3.功能结构图4.界面展示5.源码获取 1.摘要 21世纪是信息的时代&#xff0c;信息技术发展突飞猛进。各种信息化管理系统如雨后春笋一样出现。Internet的迅猛发展使其成为全球信息传递与共享的巨大的资源库。越来越多的网络环境下的Web应用系统被…

基于R语言森林生态系统结构、功能与稳定性分析与可视化

在生态学研究中&#xff0c;森林生态系统的结构、功能与稳定性是核心研究内容之一。这些方面不仅关系到森林动态变化和物种多样性&#xff0c;还直接影响森林提供的生态服务功能及其应对环境变化的能力。森林生态系统的结构主要包括物种组成、树种多样性、树木的空间分布与密度…

【Git 工具】用 IntelliJ IDEA 玩转 Git 分支与版本管理

文章目录 一、使用 IDEA 配置和操作 Git1.1 查看 Idea 中的 Git 配置1.2 克隆 Github 项目到本地 二、版本管理2.1 提交并推送修改2.2 拉取远程仓库2.3 查看历史2.4 版本回退 三、分支管理3.1 新建分支3.2 切换分支3.2 合并分支3.4 Cherry-Pick 参考资料 一、使用 IDEA 配置和操…

Flink学习连载文章8--时间语义

Time的分类 (时间语义) EventTime:事件(数据)时间,是事件/数据真真正正发生时/产生时的时间 IngestionTime:摄入时间,是事件/数据到达流处理系统的时间 ProcessingTime:处理时间,是事件/数据被处理/计算时的系统的时间 EventTime的重要性 假设&#xff0c;你正在去往地下停…

自定义类型: 结构体、枚举 、联合

目录 结构体 结构体类型的声明 匿名结构体 结构的自引用 结构体变量的定义和初始化 结构体成员变量的访问 结构体内存对齐 结构体传参 位段 位段类型的声明 位段的内存分配 位段的跨平台问题 位段的应用 枚举 枚举类型的定义 枚举的优点 联合体(共用体) 联合…

【WPS】【EXCEL】将单元格中字符按照分隔符拆分按行填充到其他单元格

问题&#xff1a;实现如下图的效果 解答&#xff1a; 一、函数 IFERROR(TRIM(MID(SUBSTITUTE($A$2,",",REPT(" ",LEN($A$2))),(ROW(A1)-1)*LEN($A$2)1,LEN($A$2))),"") 二、在单元格C2中填写如下函数 三、全选要填充的单元格并且按CTRLD 函数…

BiGRU:双向门控循环单元在序列处理中的深度探索

一、引言 在当今的人工智能领域&#xff0c;序列数据的处理是一个极为重要的任务&#xff0c;涵盖了自然语言处理、语音识别、时间序列分析等多个关键领域。循环神经网络&#xff08;RNN&#xff09;及其衍生结构在处理序列数据方面发挥了重要作用。然而&#xff0c;传统的 RN…

卸载 Archiconda

一、卸载创建的虚拟环境 # 1.查看所创建的虚拟环境 conda env list# 2.一 一删除创建的虚拟环境&#xff0c;name 替换为自己创建的虚拟环境的名字 conda remove --name name --all二、卸载archidonda rm -rf ~/archiconda3三、删除conda的环境变量 外链图片转存失败,源站可…

【Java基础面试题001】Java中序列化和反序列化是什么?

在Java中&#xff0c;序列化和反序列化是用于将对象的状态保存和恢复的重要机制。 序列化 是将Java对象转换为字节流的过程&#xff0c;这样Java对象才可以网络传输、持久化存储还有缓存。Java提供了java.io.Serializable接口来支持序列化&#xff0c;只要类实现了这个接口&a…

前端学习week8——vue.js

Vue.js 基础 Vue 核心概念&#xff1a;了解 Vue 的响应式系统、组件、指令&#xff08;如 v-if、v-for、v-model 等&#xff09;。Vue 项目管理&#xff1a;学习 Vue CLI 或 Vite&#xff0c;掌握项目创建、管理和打包。推荐学习顺序&#xff1a;Vue 基础 → 组件化开发 → Vu…

Excel如何限制单元格内可选择的下拉框内容?

先选择想要的表格区域&#xff1a; 如果想要选中如下所示&#xff1a;C2格子及其下面所有的格子&#xff08;则&#xff1a;点击一下C2格子&#xff0c;然后按一下键盘&#xff1a;SHIFT CTRL ↓&#xff09; 然后在【sheet2】表&#xff0c;先填写好下拉框可选择的内容&am…

uniapp实现列表页面,实用美观

咨询列表页面 组件 <template><view><view class"news_item" click"navigator(item.id)" v-for"item in list" :key"item.id"><image :src"item.img_url"></image><view class"righ…

Linux学习笔记11 系统启动初始化,服务和进程管理(下)

前文 前文介绍了系统启动初始化程序&#xff0c;介绍了systemd的基础知识。这里主要看一下我们systemd的单元管理和常用的命令以及示例。 Linux学习笔记10 系统启动初始化&#xff0c;服务和进程管理&#xff08;上&#xff09;-CSDN博客 systemd单元管理 启动服务 这很常…

哈希表,哈希桶的实现

哈希概念 顺序结构以及平衡树中&#xff0c;元素关键码与其存储位置之间没有对应的关系&#xff0c;因此在查找一个元素 时&#xff0c;必须要经过关键码的多次比较。顺序查找时间复杂度为O(N)&#xff0c;平衡树中为树的高度&#xff0c;即 O(logN)&#xff0c;搜索的效率取决…

Maven install java heap space

Maven install java heap space 打包报错 Maven install java heap space 解决&#xff1a; vm option: -Xms1024m -Xmx1024m如果 vm配置了&#xff0c;还是一样报错&#xff0c;就重新选择JRE看看是否正确&#xff0c;idea会默认自己的环境&#xff0c;导致设置vm无效&…

aws(学习笔记第十五课) 如何从灾难中恢复(recover)

aws(学习笔记第十五课) 如何从灾难中恢复 学习内容&#xff1a; 使用CloudWatch对服务器进行监视与恢复区域(region)&#xff0c;可用区(available zone)和子网(subnet)使用自动扩展(AutoScalingGroup) 1. 使用CloudWatch对服务器进行监视与恢复 整体架构 这里模拟Jenkins Se…

【Maven】依赖管理

4. Maven的依赖管理 在 Java 开发中&#xff0c;项目的依赖管理是一项重要任务。通过合理管理项目的依赖关系&#xff0c;我们可以有效的管理第三方库&#xff0c;模块的引用及版本控制。而 Maven 作为一个强大的构建工具和依赖管理工具&#xff0c;为我们提供了便捷的方式来管…

go语言的成神之路-筑基篇-中间件

目录 单个Gin中间件 中间件简要概述 一、中间件的定义&#xff1a; 二、中间件的使用&#xff1a; 效果展示 多个Gin中间件 示例 Abort阻止后续处理函数 执行流程图 return直接返回 执行流程图 全局注册中间件 注意事项 单个Gin中间件 中间件简要概述 在 gin 框架中…

Xilinx PCIe高速接口入门实战(一)

引言&#xff1a;本文对Xilinx 7 Series Intergrated Block for PCI Express PCIe硬核IP进行简要介绍&#xff0c;主要包括7系列FPGA PCIe硬核资源支持、三IP硬核差异、PCIe硬核资源利用等相关内容。 1. 概述 1.1 7系列FPGA PCIe硬件资源支持 7系列FPGA对PCIe接口最大支持如…