합성수 찾기
문제 #
약수의 개수가 세 개 이상인 수를 합성수라고 합니다. 자연수 n
이 매개변수로 주어질 때 n
이하의 합성수의 개수를 return하도록 solution 함수를 완성해주세요.
-
제한사항
• 1 ≤
n
≤ 100 -
입출력 예
n result 10 5 15 8
나의 풀이 #
// N의 값이 2이상의 수로 나누어 떨어지면 소수가 아님을 이용
class Solution {
public int solution(int N) {
int cnt = 0;
// 2,3은 소수이기 때문에 제외함
for(int num = 4; num<=N; num++){
// N = x*y일때 x,y는 x ≤ √N ≤ y임을 이용하여 √N까지만 반복함으로써 시간복잡도를 줄인다.
for(int i = 2; i<=Math.sqrt(num); i++){
if(num%i == 0) {
cnt++;
break;
// N이하의 수인 num가 합성수일경우 더 반복하지 않고 카운트 후 다음 num으로 넘어가 더 빠르게 처리한다.
}
}
}
return cnt;
}
}
다른 사람의 풀이 #
//다른 사람의 풀이중 참조할 코드를 적는다.
관련개념 학습 #
- 에라토스테네스의 체 ( 소수를 구하는 알고리즘 )
- k=2부터 √n이하까지 반복하여 자연수중 k를 제외한 k의 배수를 제외하는 방식
ctrl + p
로 내가 필기한 내용 중에서 관련내용이 있는지 찾아서 그 페이지의 링크를 복사하여 붙혀넣는다.- 필기 페이지에도 이 문제의 링크를 복사하여 “관련 문제"라고 써놓고 붙혀넣는다.