1부터 입력받은 숫자 n 사이에 있는 소수의 개수를 반환하는 함수, solution을 만들어 보세요.
소수는 1과 자기 자신으로만 나누어지는 수를 의미합니다.
(1은 소수가 아닙니다.)
import java.util.*;
class Solution {
public int solution(int n) {
int answer = 0;
boolean[] isPrime = new boolean[n+1];
Arrays.fill(isPrime, true);
isPrime[0]=isPrime[1]=false;
for(int i=2; i*i<=n;i++){
if(isPrime[i]){
for(int j=i*i; j<=n; j +=i){
isPrime[j] = false;
}
}
}
for(int i=0; i<=n; i++){
if(isPrime[i]) answer++;
}
return answer;
}
}
1쪽이 set을 사용하여 간결하나
2보다 범위가 더 넓어 처리양이 많아 처리속도가 느리다.
def solution(n):
num=set(range(2,n+1))
for i in range(2,int(n**0.5)+1):
if i in num:
num-=set(range(2*i,n+1,i))
return len(num)
def solution(n):
isPrime = [True]*(n+1)
end =int(n**0.5)+1
isPrime[0]=isPrime[1]=False
for i in range(2, end):
if isPrime[i]:
for j in range(i*i, n+1, i):
isPrime[j] = False
answer = isPrime.count(True)
return answer