본문 바로가기

카테고리 없음

[리눅스/쉘 스크립트] bash 쉘로 함수 짜서 소수 구하기

#!/bin/sh

# getPrimes.sh 
# 입력 숫자의 이하에서 소수를 구해주는 스크립트
# 어떤 숫자가 소수인지를 판정하는 isPrime() 함수를 작성하여 이용한다.
# 함수 호출을 자주해서인지 속도가 무척 느리다.

function isPrime() {
    local number=$1
    flag=1
    rootNum=$(bc <<< "scale=0; sqrt($number)")
    for ((i=2; i<=rootNum; i++))
    do
        if (( $number % i == 0 ))
        then
            flag=0;
            break
            #return 0
        fi
    done
    echo $flag
}

printf "입력 숫자 이하의 소수를 구합니다. 숫자를 입력하세요: "
read num

count=0
for (( i=2; i<=$num; i++ ))
do
    result=$(isPrime $i)
    #printf "result=$result\n"
    if [[ $result == 1 ]];
    #if [[ $? == 1 ]];
    then
        printf "$i  "
        ((count++))
        #printf "$count"
    fi
done

printf "\n$num 이하의 소수 개수: $count 개\n"

----실행 결과-----
[Don@localhost BASH]$ sh getPrimes.sh
입력 숫자 이하의 소수를 구합니다. 숫자를 입력하세요: 1000
2  3  5  7  11  13  17  19  23  29  31  37  41  43  47  53  59  61  67  71  
73  79  83  89  97  101  103  107  109  113  127  131  137  139  149  151  
157  163  167  173  179  181  191  193  197  199  211  223  227  229  233 
239  241  251  257  263  269  271  277  281  283  293  307  311  313  317  
331  337  347  349  353  359  367  373  379  383  389  397  401  409  419  
421  431  433  439  443  449  457  461  463  467  479  487  491  499  503  
509  521  523  541  547  557  563  569  571  577  587  593  599  601  607  
613  617  619  631  641  643  647  653  659  661  673  677  683  691  701  
709  719  727  733  739  743  751  757  761  769  773  787  797  809  811  
821  823  827  829  839  853  857  859  863  877  881  883  887  907  911  
919  929  937  941  947  953  967  971  977  983  991  997  
1000 이하의 소수 개수: 168 개