我尝试使用这段代码打印出指定数量的质数,但我不断遇到错误
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
我尝试通过谷歌搜索,但最终我不明白正确的语法,我希望有人可以帮助
您可以编写非常干净的代码。只需使用一些缩进即可。另外,我使用简单的算法来查找从 1 到 N 的素数:
>= 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 ""