개발👩‍💻/알고리즘

백준 js 1978: 소수 찾기

gigibean 2021. 5. 5. 15:21
728x90

문제

주어진 수 N개 중에서 소수가 몇 개인지 찾아서 출력하는 프로그램을 작성하시오.

입력

첫 줄에 수의 개수 N이 주어진다. N은 100이하이다. 다음으로 N개의 수가 주어지는데 수는 1,000 이하의 자연수이다.

출력

주어진 수들 중 소수의 개수를 출력한다.

예제 입력 1

4

1 3 5 7

예제 출력 1

3

 

풀이

소수를 찾는 방법을 알면 쉽게 풀 수 있다.

소수는 2이상의 수 중, 나누어 지는 수(약수)가 자신과 1밖에 없는 수를 말한다.

그러면 해당 수를 n라고 하고, n가 소수인지 찾기 위해 루프문 내에서 하나씩 비교해보면 된다.

 

그렇게 되면 O(n)이 된다.

그러나 

n = a * b (a <= b)
a <= √n and b >= √n

a < √n, b < √n
=> 
a * b < n

a > √n, b > √n
=>
a * b > n

a = b 이면 소수가 아니게 된다 (√n라는 수로 나누어지므로)

반대로 얘기하면 √n이하의 수로 나누어진다면 소수가 아니다.

따라서, √n까지만 검사해보면 된다.

 

const isPrime = (n) => {
	if (n < 2) return false;
    for (i = 2; i * i < n; i++) {
    	if (n % 1 === 0) return false;
    }
    return true;
}

 

그러나 for문에서  i < √n으로 비교하는 것은 √n가 정수가 아닐 수 있어 위험하므로

i * i < n 로 조건문을 수행한다.

전체 코드

 

반응형