我正在尝试从Python(What is the best algorithm for checking if a number is prime?)“引导”到Shell脚本。这是我的想法(可能非常愚蠢的代码):
#!/bin/bash
prime (){
i=5
w=2
while [ `echo "$i*$i" | bc -l ` -le $n ]
do
if [ n % i -eq 0 ]
then echo "$n is not prime"
else
i = i + w
w = 6 - w
echo "$n is prime"
fi
done
}
echo "Test for knowing if a number is prime or not."
sleep 2
echo "Enter the number"
read n
if [ $n -eq 1 ]
then echo "Number 1 is not prime"
elif [ $n -eq 2 ]
then echo "Number two is prime"
elif [ $n -eq 3 ]
then echo "Number three is prime"
else
prime
fi
问题是当我输入任何其他数字(4,5,6,......)时,如果$ n是素数,则程序不会返回。如果有人能帮助我,我将非常感激。
答案 0 :(得分:1)
如果您可以从GNU核心实用程序访问factor
:
f=$(factor 11 | wc -w); [[ $f -eq 2 ]] && echo prime || echo not prime
输出:
prime
f=$(factor 6 | wc -w); [[ $f -eq 2 ]] && echo prime || echo not prime
输出:
not prime
答案 1 :(得分:0)
代码中存在很多问题。 主要问题是您没有正确实现该链接中给出的代码。 您没有通过2,3(第3和第4个条件)检查可分性,因此代码将退出少于25的数字,因此我添加了这些条件。 此外,在if语句,作业等方面存在错误, 请告诉您是否需要进一步澄清。
这是更正后的代码
#!/bin/bash
prime (){
i=5
w=2
isprime=1
while [ `echo "$i*$i" | bc -l ` -le $n ]
do
if [ $((n % i)) -eq 0 ]
then
isprime=0
break
else
i=$(($i+$w))
w=$((6-$w))
fi
done
if [ $isprime -eq 0 ]
then echo "$n is not a prime"
else
echo "$n is a prime"
fi
return 0
}
echo "Test for knowing if a number is prime or not."
echo "Enter the number"
read n
if [ $n -eq 1 ]
then echo "Number 1 is not prime"
elif [ $n -eq 2 ]
then echo "Number two is prime"
elif [ $n -eq 3 ]
then echo "Number three is prime"
elif [ $((n % 2)) -eq 0 ]
then echo "$n is not a prime"
elif [ $((n % 3)) -eq 0 ]
then echo "$n is not a prime"
else
prime
fi
希望这有帮助。