【问题标题】:Finding prime numbers within a given range of numbers在给定的数字范围内查找素数
【发布时间】:2020-10-03 17:29:35
【问题描述】:

这个 shell 脚本程序有什么问题? 该程序是关于在给定的数字范围内查找素数。但是当我给出 20 到 100 的范围时,它也会将一些数字(如 25,77 等)显示为素数。但是当我给出的范围为 20 到30 然后它不会将 25 显示为素数。当输入大小很大时,似乎嵌套的 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

【问题讨论】:

  • 不是显示25作为素数吗?真的是你的意思吗?

标签: linux shell unix git-bash windows-subsystem-for-linux


【解决方案1】:

在这一行:

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

你取的是a的平方根,但它应该是i

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

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

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

【讨论】:

    【解决方案2】:

    看看

        #!/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
    

    【讨论】:

    • 是的!小变量错误,已经解决了。但是感谢您的努力。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-09
    • 2014-04-27
    • 1970-01-01
    • 2015-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多