2014-12-06 153 views
1

我试图从Python(What is the best algorithm for checking if a number is prime?)“拼写”到Shell脚本。这是我的想法(可能是很无聊的代码):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

问题是什么? – csmckelvey 2014-12-06 19:20:26

+0

我忘了,很抱歉。我编辑了这个问题。感谢您的观察。 – Carlos 2014-12-06 19:25:06

+0

如果你想继续保持同样的态度,那么你有一个漫长的夜晚... – 2014-12-06 19:37:35

回答

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 

希望这有助于。

+0

非常感谢。事实上,我的“转录代码”太错误了。 – Carlos 2014-12-06 20:59:24

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 
+0

我很抱歉,我不明白。什么是因素? – Carlos 2014-12-06 19:45:09

+0

'factor'是GNU核心实用程序的一部分,用于分解/因式分解。请参阅:http://www.gnu.org/software/coreutils/manual/html_node/factor-invocation.html#factor-invocation – Cyrus 2014-12-06 19:51:33