脚本内容:
#!/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命令用法请点击跳转