检查素数的 Shell 脚本

2023-11-20

素数是大于 1 的自然数,除了 1 和它本身之外没有正因数。在本文中,我们将探讨如何编写 shell 脚本来检查给定数字是否为素数。该脚本将用 Bash 编写,Bash 是一种流行的 shell 语言,常用于 Linux 等类 Unix 操作系统。

shell 脚本是用 shell 编程语言编写的程序,它执行从键盘等输入设备或文件读取的命令。 Shell 脚本是自动执行任务的强大工具,在这种情况下,它还可以用于解决数学问题,例如检查素数。

基本素数算法

检查素数的总体思路非常简单。我们首先将数字除以所有整数,直到其平方根。如果该数字可以被任何这些整数整除,则它不是素数。如果它不能被这些数字中的任何一个整除,那么它就是素数。

检查素数的 Shell 脚本

下面是 Bash 中检查数字是否为素数的基本 shell 脚本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#!/bin/bash
 
echo “输入一个数字:”
read number
i=2
 
if [ $number -lt 2 ]
then
    echo “$number 不是素数。”
    exit
fi
 
while [ $i -lt $number ]
do
    if [ `expr $number % $i` -eq 0 ]
    then
        echo “$number 不是素数。”
        exit
    fi
    i=`expr $i + 1`
done
 
echo “$number 是质数。”

该脚本首先接受用户输入的数字。然后检查该数字是否小于 2。如果是,则立即断定该数字不是素数并终止脚本。这是因为最小的素数是 2。

接下来,它进入 while 循环,将数字除以从 2 到数字本身的所有整数。它检查每个分区的剩余部分。如果余数为零,则意味着该数可以被另一个数整除,因此它不是素数。然后脚本输出这个结论并终止。

如果该数字不能被任何整数整除,则 while 循环结束而不触发循环内的条件。然后脚本得出结论,该数字是素数,输出该数字,然后终止。

优化素数算法

上面的脚本简单易懂,但它并不是检查数字是否为素数的最有效的算法。我们可以通过仅检查数字平方根的整除性来优化它,而不是检查数字本身。这是基于数学事实,即数字的较大因子将是已检查的较小因子的倍数。

这是该脚本的优化版本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#!/bin/bash
 
echo “输入一个数字:”
read number
i=2
 
if [ $number -lt 2 ]
then
    echo “$number 不是素数。”
    exit
fi
 
max=`echo “sqrt($数字)” | bc`
while [ $i -le $max ]
do
    if [ `expr $number % $i` -eq 0 ]
    then
        echo “$number 不是素数。”
        exit
    fi
    i=`expr $i + 1`
done
 
echo “$number 是质数。”

该版本的变化是计算`max`,它是数字的平方根,我们使用`bc`命令来计算这个。然后我们只循环到`max`而不是数字本身。

此优化版本减少了迭代次数,这对于大量数据来说可能很重要,因此使脚本运行得更快。

结论

Shell 脚本是一种多功能且功能强大的工具,可用于从自动化到复杂计算的各种任务。通过了解编程和数学的基本原理,我们可以创建一个脚本来检查给定的数字是否为素数。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

检查素数的 Shell 脚本 的相关文章

  • html src 参数,HTTP参数解析

    本文概述 在本节中 我们将讨论各种HTTP参数及其语法 例如 日期和时间格式 字符集等 这些参数用于在编写客户端或服务器的HTTP程序时构造请求和响应消息 HTTP的各种参数如下 HTTP版本 为了指示协议的版本 HTTP使用 编号方案 协
  • 办公网络上网行为管理规划

    办公网络上网行为管理规划是确保办公网络资源的合理利用和保障网络安全的重要措施 下面是办公网络上网行为管理规划的一般性步骤和原则 确立政策和准则 制定明确的上网行为管理政策和准则 明确员工在办公网络上的合规要求和行为规范 包括规定员工上网内容
  • 项目设计:基于YOLO目标检测算法的安全帽/口罩/汽车/行人/交通标志...检测

    本文将详细介绍YOLO目标检测算法 该算法支持各种目标检测 包括 安全帽 汽车 造价 交通标志 等 其他毕业设计题目推荐参考 毕业设计 电子 通信 计算机 物联网专业毕业设计选题参考 嵌入式linux 单片机STM32 web 图像 htt
  • 数据库难点知识

    索引 当表中有大量记录时 若要对表进行查询 第一种搜索信息方式是全表搜索 是将所有记录一一取出 和查询条件进行一一对比 然后返回满足条件的记录 这样做会消耗大量数据库系统时间 并造成大量磁盘I O操作 第二种就是在表中建立索引 然后在索引中
  • matlab通用操作界面窗口包括哪些,matlab作业题

    第一章 MATLAB环境 1 MATLAB通用操作界面窗口包括哪些 命令窗口 历史命令窗口 当前目录窗口 工作空间窗口各有哪些功能 答 MATLAB通用操作界面窗口包括 命令窗口 历史命令窗口 当前目录浏览器窗口 工作空间窗口 变量编辑器窗
  • 前端的工程化、模块化和组件化

    什么是工程化 工程化是一种思想而不是某种特定的技术 当然我们在实现项目工程化的过程中 我们也会去使用一些技术 前端工程化是使用软件工程的技术和方法来对前端的开发流程 技术 工具等进行规范化 标准化 其主要目的为了提高效率和降低成本 即提高开
  • 使用Class.forName 自动完成注册驱动,简化代码 但是 “//” 是使用最多的

    方式1 public void connect05 throws IOException ClassNotFoundException SQLException 通过properties对象获取文件信息 Properties propert
  • Python爬虫突破封禁的6种常见方法

    在互联网上进行自动数据采集 抓取 这件事和互联网存在的时间差不多一样长 今天大众好像更倾向于用 网络数据采集 有时会把网络数据采集程序称为网络机器人 bots 最常用的方法是写一个自动化程序向网络服务器请求数据 通常是用 HTML 表单或其
  • select2 获取选中的值

    获取选中的名 var cardTypeW cardType option checked text 获取选中的值 写法1 var cardTypeW cardType option checked val 写法2 var cardTypeW
  • js逆向-某旗小说

    声明 本文仅供学习参考 请勿用于他途 违者后果自负 前言 笔者一直是一个小说控 喜欢看小说很多年了 自从学会了python后 就经常会去不同的小说网站抓取小说保存到本地阅读 最近发现一本很好看的小说 准备抓下来看 却发现有请求参数和返回的接
  • webpack的构建流程

    一 运行流程 webpack 的运行流程是一个串行的过程 它的工作流程就是将各个插件串联起来 在运行过程中会广播事件 插件只需要监听它所关心的事件 就能加入到这条webpack机制中 去改变webpack的运作 使得整个系统扩展性良好 从启

随机推荐

  • opencv生成棋盘格

    头文件 include
  • 前端将List列表转化为树型结构(reduce函数)

    主要用到了reduce 函数 for循环可以做到的事情reduce 都可以做到 甚至操作起来更加简单方便和高雅 reduce 为数组中的每一个元素依次执行回调函数 不包括数组中被删除或从未被赋值的元素 reduce语法 array redu
  • 使用我们的actionbar实现我们的tab导航功能(详解)

    第一步的话就是创建我们对应的fragment 这里的话我们创建了三个对应的fragment 第二步的话就是创建我们的mytablistener类 package com example handle Fragments import and
  • 超简单:很火的3D立体动态相册,送给心爱的那个人

    1 首先 我们一共需要三个文件 目录关系如下所示 先建index html文件吧 电脑上先创建一个 txt文件 在里面加入代码后保存 重命名为index html 记得把原来的 txt后缀覆盖 html我用的谷歌浏览器 index html
  • pg_receivewal实践

    测试从pg receivewal的日志中恢复从库为主库 主从配置async模式 配置pg receivewal接收日志pg receivewal D dbaas pg data pg receivewal data v h 10 9 10
  • 动态模型系列笔记(一)——隐马尔可夫模型(HMM)

    隐马尔可夫模型 背景介绍 提纲 隐马尔可夫模型 HMM 符号表示 两个假设 三个问题 Evaluation Learning Decoding 小结 附录 背景介绍 隐马尔可夫模型 HMM 是一种概率图模型 我们知道 机器学习模型可以从频率
  • 自创简易加密算法

    前几日和同事聊天 说到经常忘记密码 但记在一些地方 又不放心 我们就想 要是实现一个加密算法 每次记录加密结果 需要时再解密 那问题不就迎刃而解了嘛 后来根据需求 设计了一个基于异或的对称加密算法 算法非常简单 1 先定义一个由一系列不规则
  • LLVM IR(一)——如何使用LLVM编译执行代码

    可以转载 请注明出处 文章目录 1 1 LLVM IR的三种结构 1 2将C文件转为LLVM IR汇编码 1 3将LLVM IR汇编码转为bitcode 1 4执行LLVM bitcode 1 5链接LLVM bitcode 1 6自己写一
  • 分布式系统详解--基础知识(通信)

    分布式系统详解 基础知识 通信 上一篇文章我们写到了 分布式系统详解 基础知识 线程 简单了解了一下线程的基本概念和线程和分布式的那斩不断理还乱的关系 今天再讲解一下它的另外一个必备知识 通信 进程之间进行通信是分布式的核心 失去了通信 也
  • 好用的c++11纳米级的测量时间消耗的类

    需要包含的头文件及类实现 include
  • Ubuntu 操作系统学习笔记之文件系统

    概述 操作系统通过文件系统管理文件及数据 磁盘或分区需要创建文件系统后才能被OS使用 创建文件系统的过程称之为 格式化 裸 raw 设备 没有文件系统的设备 常见文件系统 Fat32 NTFS Ext2 Ext3 Ext4 xfs HFS
  • 在 Linux 系统上安装 Nginx 的分步指南

    在不断发展的 Web 开发世界中 选择可靠且高效的 Web 服务器可以极大地影响 Web 应用程序和网站的成功 Nginx 因其高性能 开源设计和低资源消耗而成为许多开发人员的首选 这款功能强大的 Web 服务器软件以其稳定性 丰富的功能和
  • 如何移动完整的 Git 存储库

    Git 已成为软件开发中版本控制和协作的事实上的标准 有时 开发人员可能需要将整个 Git 存储库 包括其历史记录 分支和标签 移动到新位置或托管服务 在本综合指南中 我们将讨论无缝重新定位完整 Git 存储库而不会丢失任何关键数据或历史记
  • 如何在 Ubuntu 18.04(仿生)上安装 Ansible

    Ansible 是一种自动化工具 用于从单台计算机管理多个远程主机 它为您提供了针对大量远程主机的轻松配置 例如 您在多台机器上执行相同的任务 Ansible 为您提供了自动执行这些任务的选项 本教程将帮助您在 Ubuntu 18 04 B
  • Ubuntu 16.04 LTS 版本 – 此版本有哪些新增功能?

    Ubuntu 16 04 LTS Xenial Xerus Final 已发布 有很多更改 以下是此版本中可用的一些更改列表 使用以下教程从旧版本升级到 Ubuntu 16 04 如何将 Ubuntu 14 04 升级到 Ubuntu 16
  • 如何在 Debian 11/10 上安装 SVN 服务器

    SVN是由Apache基金会团队构建的开源版本控制系统 它可以帮助您跟踪文件和文件夹的集合 每当您更改 添加或删除使用 Subversion 管理的文件或文件夹时 您都会将这些更改提交到 Subversion 存储库 这会在您的存储库中创建
  • 在每月的最后一天安排 Cron 作业

    Cron 作业是系统管理中必不可少的自动化脚本 并且在类 Unix 操作系统中普遍存在 它们允许系统管理员和开发人员安排任务 作业 在特定时间运行 这对于数据库维护 系统更新和数据备份等任务非常有用 本文将深入探讨如何专门为该月的最后一天安
  • 在 Windows Server 2008 上为通配符 SSL 创建 CSR

    企业社会责任代表 证书签名请求 是一个加密的文本块 在将使用证书的服务器上生成 CSR 包含有关您的组织和域名 地点和国家 地区的信息 它还包含将包含在您的证书中的公钥 For creating CSR for wildcard ssl y
  • 检查素数的 Shell 脚本

    素数是大于 1 的自然数 除了 1 和它本身之外没有正因数 在本文中 我们将探讨如何编写 shell 脚本来检查给定数字是否为素数 该脚本将用 Bash 编写 Bash 是一种流行的 shell 语言 常用于 Linux 等类 Unix 操
  • 如何允许远程 MySQL 连接

    管理 MySQL 数据库并不总是意味着从托管它的同一服务器访问它 在许多情况下 尤其是随着分布式应用程序和云服务的兴起 您可能需要从远程位置连接到 MySQL 服务器 这是有关如何设置的指南 第 1 步 备份数据库 在对 MySQL 配置进