2014-12-06 202 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