본문 바로가기

카테고리 없음

[리눅스/쉘 스크립트] bash쉘로 소수 여부 판정하기

#!/bin/sh
# isPrime.sh
# 어떤 수가 소수인지 아닌지 판단한다. 그 수를 그 수의 루트까지로 나눠봐서 나눠지면 소수, 
# 아니면 소수가 아니다.

printf "소수인지를 알려줍니다. 숫자를 입력하세요: "
read num
# 입력 숫자의 루트를 구한다.  bc 이외에도 awk, 외부 프로그램인 qalc를 사용할 수 있다. bash에서는 소수를 
# 인식할 수 없어서 제곱근값을 정수로 뽑아줘야 한다. scale=0을 쓴 이유...
rootNum=$(bc <<< "scale=0; sqrt($num)")
for ((i=2; i<=rootNum; i++))
do
    if (( $num % i == 0 )) 
    then
        printf "$num은 소수가 아닙니다.\n"
        exit 0
    fi
done
printf "$num은 소수입니다.\n"

--실행 결과--
[Don@localhost BASH]$ bash isPrime.sh
소수인지를 알려줍니다. 숫자를 입력하세요: 99
99은 소수가 아닙니다.
[Don@localhost BASH]$ bash isPrime.sh
소수인지를 알려줍니다. 숫자를 입력하세요: 2147483647
2147483647은 소수입니다.
[Don@localhost BASH]$ bash isPrime.sh
소수인지를 알려줍니다. 숫자를 입력하세요: 4294145925
4294145925은 소수가 아닙니다.