글 작성자: DevJonny

📕 소수인지 아닌지 판별하기

학교 강의에서 C, Java, C# 등을 배우면 한 번씩은 마주치는 문제다.
사실 며칠 전에 같은 과 동기한테 C#을 가르쳐주다가 어려워하길래 어떻게 쉽게 설명하지.. 하다가 그냥 글로 써버리기로 했다. 내가하는거 말고 방식은 많으니 다른 것도 참고해보시길...

💡 소수란?

1과 자기 자신으로만 나눠 떨어지는 수, 즉 약수가 1과 해당 숫자 뿐이다.
예를들어 7은 약수가 1, 7이기 때문에 소수, 6은 약수가 1, 2, 3, 6이기 때문에 소수가 아니다.

🔥 문제

숫자를 입력받으면 그 숫자가 소수인지 아닌지 출력하시오.

✏️ 입력

7

혹은

6

🖨️ 출력

소수입니다.

혹은

소수가 아닙니다.

💡 해결해 봅시다.

코딩 전 해결순서 나열

1. 숫자를 입력받는다. (변수명을 num으로 지정하겠다.)

2. 소수인지 판별한다.

2-1. num == 2 일경우 true를 return 한다. (2는 유일한 짝수형 소수)

2-2. num % 2 == 0 일경우 false를 return 한다. (2를 제외한 짝수는 모두 소수가 아님)

2-3. 여기서부터 중요!!!

num % 2부터 num-1 까지의 숫자들 == 0 일 경우 false를 return 한다.
이게 무슨 말이냐.

예를들어 15가 입력되었다고 하자.
만일 2~14까지 숫자 (2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14) 중에서 한 개라도 15랑 나누어 떨어진다면 소수가 아니므로 false를 return 한다.
순차적으로 생각해보자면
15 % 2 == 7.5; 나누어 떨어지지 않으니까 true
15 % 3 == 5; 나누어 떨어지니까 false -> 이 시점에서 이미 15는 소수가 아님. 고로 false를 return 한다.

반대로 생각해서 7이 입력되었다고 하자.
만일 2~6까지 숫자 (2, 3, 4, 5, 6) 중에서 한 개라도 6이랑 나누어 떨어진다면 false를 return 한다.
순차적으로 생각해보면
7 % 2 == 3.5; 나누어 떨어지지 않으니까 true
7 % 3 == 2.333; 나누어 떨어지지 않으니까 true
7 % 4 == 1.75; 나누어 떨어지지 않으니까 true
7 % 5 == 1.4; 나누어 떨어지지 않으니까 true
7 % 6 == 1.166; 나누어 떨어지지 않으니까 true
-> 2부터 6까지 전부 나눴음에도 전부 true이므로 고로 7은 소수이다.


3. 마지막으로 결과 값을 출력한다.

소수입니다.
소수가 아닙니다. 등등...

⌨️ 코딩해봅시다.

0. 먼저 변수 초기화

int num = 0;
bool isitsosu = true; //아무걸로나 초기화해줘도 됨.

1. 숫자를 입력받는다.

num = int.Parse(Console.ReadLine()); //ReadLine은 String만 받기 때문에 Parse 필수

2. 소수인지 판별한다.

//2-1. num이 2이면 true
if(num == 2){
	isitsosu = true;
    
//2-2. num이 짝수이면 false
} else if (num % 2 == 0){
	isitsosu = false;
    
//2-3. num % 숫자들 == 0이 한번이라도 나올 시 false하고 break;
} else {
	//어짜피 2는 위에서 판별했으니 3부터 시작
	for(int i=3; i<num; i=i++){
		if(num % i == 0){ //num이 i로 나누어 떨어질경우
			isitsosu = false; //나누어 떨어지는게 있으니 false
			break; //어짜피 소수가 아니니까 반복 중지
		} else {
        		isitsosu = true; //나누어 떨어지지 않으면 true
		}
	}
}

3. 마지막으로 결과 값을 출력한다.

if(isitsosu){
	Console.WriteLine("소수입니다.");
} else {
	Console.WriteLine("소수가 아닙니다.");
}

🖨️ 결과 값

15
소수가 아닙니다.

7
소수입니다.

마치며

처음으로 알고리즘 관련해서 글을 써보는거라
조금 부족한 설명이 있을 수도 있지만..

이외의 궁금한 점은 댓글로 남겨주시길.. 😆