我尝试使用此代码打印出指定数量的素数,但我不断遇到错误

问题描述 投票:0回答:1

我尝试使用这段代码打印出指定数量的质数,但我不断遇到错误


echo "enter range: "
read n
echo "prime no are:"
m=2
while [ $m -le $n ] do
i=2 flag=0
while [ $i -le `expr $m/2` ] do
if [ `expr $m % $i` -eq 0 ] then
flag=1 break fi
i= `expr $i +1`
then
if [ $flag -eq 0 ]
then echo $m fi
    m= `expr $m + 1`

done

我尝试通过谷歌搜索,但最终我不明白正确的语法,我希望有人可以帮助

sh echo
1个回答
0
投票

您可以编写非常干净的代码。只需使用一些缩进即可。另外,我使用简单的算法来查找从 1 到 N 的素数:

  • 对于从 1 到 N 的每个元素 i,计算其平方根
  • 求 i 的因数,如果因数为
    >= 1
    ,则不是质数,否则为质数。
echo -n "enter range: "
read n
if [ $n -le 1 ]
then
        echo "No prime numbers found"
        exit 0
fi

echo -n "prime no are:"
if [ $n -eq 2 ]
then
        echo -ne " 2\n"
        exit 0
fi
i=2
while [ $i -le $n ]
do
        j=2
        factors=0
        sqrt_i=`echo $i | awk '{printf int(sqrt($1))}'`
        #echo "Sqrt of $i is $sqrt_i"
        while [ $j -le $sqrt_i ]
        do
                if [ `expr $i % $j` -eq 0 ]
                then
                        factors=`expr $factors + 1`
                fi
                j=`expr $j + 1`
        done
        #echo "Number of factors: $factors"
        if [ $factors -eq 0 ]
        then
                echo -n " $i"
        fi
        i=`expr $i + 1`
done
echo ""
© www.soinside.com 2019 - 2024. All rights reserved.