Bash란 무엇인가?
Bash(GNU Bash)는 명령어 언어이자 유닉스 셸 스크립트로, 운영체제에서 명령줄 인터프리터(command line interpreter) 역할을 수행합니다. 브라이언 폭스(Brian Fox)가 설계했으며, 기존의 본 셸(Bourne shell)을 대체하는 자유 소프트웨어입니다. 1989년에 처음 공개된 이후 리눅스 배포판은 물론 macOS 같은 유닉스 계열 운영체제에서도 기본 로그인 셸로 널리 사용되고 있습니다.
소수(Prime Number)란?
소수란 약수가 정확히 두 개뿐인 수, 즉 1과 자기 자신으로만 나누어 떨어지는 수를 의미합니다. 대표적인 예로 2, 3, 5, 7, 11, 13, 17, 19, 23, 29 등이 있습니다.
이번 글에서는 주어진 숫자가 소수인지 아닌지를 판별하는 Bash 프로그램을 작성해 보겠습니다.
입력 : 하나의 숫자 출력 : 해당 숫자에 따라 "소수입니다" 또는 "소수가 아닙니다" 출력
예시 −
입력 : 23 출력 : 소수입니다
알고리즘
1단계 − i를 반복 변수로 사용하여 2부터 n/2까지 반복문을 실행합니다.
2단계 − 만약 숫자가 i로 나누어 떨어진다면 "소수가 아닙니다"를 출력하고 flag = 1로 설정합니다.
3단계 − 반복문이 끝난 후 flag != 1이라면 "소수입니다"를 출력합니다.
4단계 − 프로그램을 종료합니다.
프로그램 코드
number=53
i=2
flag=0
while test $i -le `expr $number / 2`
do
if test `expr $number % $i` -eq 0
then
flag=1
fi
i=`expr $i + 1`
done
if test $flag -eq 1
then
echo "The number is Not Prime"
else
echo "The number is Prime"
fi실행 결과
The number is Prime
코드 동작 원리
위 스크립트는 변수 number에 검사할 값(53)을 저장하고, 반복 변수 i를 2부터 시작해 number / 2까지 하나씩 늘려가며 나눗셈 검사를 진행합니다. 중간에 한 번이라도 나머지가 0이 되면 flag를 1로 설정하여 소수가 아님을 표시하고, 최종적으로 flag 값에 따라 결과를 출력합니다.
참고: 성능 개선 팁
n/2까지만 검사해도 정확도에는 문제가 없지만, 실제로 어떤 수 n의 약수는 제곱근(√n) 이하 범위 안에 반드시 존재하므로 반복 조건을 $i -le \`expr \\$(number / 2)\` 대신 √n까지로 줄이면 큰 수를 검사할 때 실행 속도를 크게 향상시킬 수 있습니다.