• Post author:
  • Post category:shell
  • Post comments:0评论

脚本内容:

#!/bin/bash
#Author:cuipeng

read -p "请输入一个大于1的整数: " num

num1=$(bc <<< "sqrt($num)")
reult=true

for x in `seq 2 $num1`
do
        num2=$(expr $num % $x)
        if [ $num2 -eq 0 ];then
                reult=false
                break
        fi
done
if [ $reult == true -a $num -ne 1 ];then
        echo "$num是素数"
else
        echo "$num不是素数"
fi

脚本解读:

  首先我们要知道素数是什么:素数也称质数,指一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数。
  那么如何判断一个数是否为素数:最简单的方法就是试除法了,将该数n用小于等于根号n的所有素数去试除,若均无法整除,n则为素数。
  那么在编程中,通常采用2到根号n之间的所有整数去试除,若均无法整除,则n为素数。

read -p "请输入一个大于1的整数: " num

  # read是用来读取用户输入信息的命令,能够把接收到的用户输入信息赋值给后面的指定变量,-p参数用于向用户显示一定的提示信息。
  # 这里是将用户输入的信息赋值给num变量。

num1=$(bc <<< "sqrt($num)")
#num1=$(echo | awk '{print int(sqrt($num))}')

  # 使用bc命令,计算变量num值的平方根,取整,将值赋值给变量num1。
  # 当然bc命令需要安装,也可以使用awk。

reult=true

  # 定义变量reult布尔值为true

for x in `seq 2 $num1`       # 循环从序列中提取值赋值给变量x。
                             # "seq 2 $num1"表示生成一个从2到变量num1的连续序列,如"seq 2 5"即生成2、3、4、5。
do
        num2=$(expr $num % $x)   # 使用expr进行取余计算,赋值给num2。
        if [ $num2 -eq 0 ];then  # 使用if语句判断变量num2是否等于0(等于0表示这个数被整除,不为素数),等于0则执行以下代码。
                reult=false      # 更改变量reult布尔值为false。
                break            # 结束当前循环,但会执行循环之后的所有代码。
        fi
done

if [ $reult == true -a $num -ne 1 ];then    # if判断变量reult布尔值是否为true且变量num值不等于1,满足则执行以下代码。
        echo "$num是素数"
else                                    # 否则就执行以下代码,即变量reult布尔值是为false。
        echo "$num不是素数"
fi

注:关于bc命令用法请点击跳转

发表回复

验证码: 2 + 2 =