在给定的数字范围内查找素数

Finding prime numbers within a given range of numbers

这个shell脚本程序有什么问题? 该程序是关于在 numbers.But 的给定范围内查找素数,当我给出范围 20 到 100.But 时,它还会显示一些数字,如 25,77 等作为素数范围为 20 到 30 那么它不会将 25 显示为质数 number.Seems 就像嵌套的 for 循环在输入大时并行 运行。

代码如下:

read -p "Enter a Range of number (a to b) : " a b

echo "Prime numbers in the given range are :"

for ((i=$a;i<=$b;i++))
do

  max1=`echo | awk "{print sqrt($a)}"`
  max2=`printf %.0f "$max1"`
  maxCap=$max2
  check=0

  for (( j=2;j<=$maxCap;j++ ))
  do
    if [ $(($i%$j)) -eq 0 ]
    then
      check=1;
      break;
    fi
  done

  if [ $check -eq 0 ]
  then
        echo -n "$i   "
  fi

done

看看

    #!/bin/bash
    read -p "Enter a Range of number (a to b) : " a b

    echo "Prime numbers in the given range are :"
    for ((i=$a; i<=$b; i++))
    do
      max=$(bc <<< "scale=0; sqrt($i)")
      check=0

      for ((j=2; j<=$max; j++))
      do
        if (( $i % $j == 0))
        then
            check=1
            break
        fi
      done
      if [ $check -eq 0 ]
      then
          echo -n "$i   "
      fi
    done

这一行:

max1=`echo | awk "{print sqrt($a)}"`

你正在计算 a 的平方根,但它应该是 i:

max1=`echo | awk "{print sqrt($i)}"`

因为您正在寻找 i 的除数的上限。

通过该更改,脚本似乎可以正常工作。