2014-12-06 3 views
1

Я пытаюсь «traduce» из Python (What is the best algorithm for checking if a number is prime?) в Shell Script. Это моя идея (вероятно, очень глупый код):Шелл сценарий простой текст

#!/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, ...) программа не возвращается обратно, если $ п первична или нет. Если кто-нибудь сможет мне помочь, я буду очень благодарен.

+0

В чем проблема? – csmckelvey

+0

Я забыл это, извините. Я редактировал вопрос. Спасибо за наблюдение. – Carlos

+0

У вас впереди длинная ночь, если вы хотите продолжать идти в том же духе ... –

ответ

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

1

Если у вас есть доступ к factor из основных утилит GNU:

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

+0

'factor' является частью основных утилит GNU и предназначен для факторизации/факторинга. Смотрите: http://www.gnu.org/software/coreutils/manual/html_node/factor-invocation.html#factor-invocation – Cyrus

Смежные вопросы