-
소수 찾기Programmers 2023. 3. 19. 16:09728x90
문제 설명
1부터 입력받은 숫자 n 사이에 있는 소수의 개수를 반환하는 함수, solution을 만들어 보세요.
소수는 1과 자기 자신으로만 나누어지는 수를 의미합니다.(1은 소수가 아닙니다.)
제한 조건
- n은 2이상 1000000이하의 자연수입니다.
입출력 예
n result
10 4 5 3 입출력 예 설명
입출력 예 #11부터 10 사이의 소수는 [2,3,5,7] 4개가 존재하므로 4를 반환
입출력 예 #21부터 5 사이의 소수는 [2,3,5] 3개가 존재하므로 3를 반환
나의 풀이
def solution(n): primes = [True] * (n+1) primes[0] = primes[1] = False for i in range(2, int(n**0.5)+1): if primes[i]: for j in range(i*i, n+1, i): primes[j] = False answer = [i for i in range(2, n+1) if primes[i]] return len(answer)
차용
- 에라토스텔레스의 체를 차용하였다
# define a function to find all prime numbers up to n using the Sieve of Eratosthenes algorithm def sieve_of_eratosthenes(n): primes = [True] * (n+1) primes[0] = primes[1] = False # 0 and 1 are not prime numbers for i in range(2, int(n**0.5)+1): if primes[i]: for j in range(i*i, n+1, i): primes[j] = False return [i for i in range(2, n+1) if primes[i]] # test the function print(sieve_of_eratosthenes(20)) # Output: [2, 3, 5, 7, 11, 13, 17, 19]
다른 사람의 풀이
def solution(n): num=set(range(2,n+1)) for i in range(2,n+1): if i in num: num-=set(range(2*i,n+1,i)) return len(num)
- 동일하게 에라토스테네스의 체를 구현했지만, set 함수로 훨씬 수월하게 구현하였다.
- 리스트로는 뺄셈이 불가하므로 set를 통해 구현한 것으로 보인다.
728x90'Programmers' 카테고리의 다른 글
실패율 (0) 2023.03.19 제일 작은 수 제거하기 (0) 2023.03.19 2016년 (0) 2023.03.19 콜라츠 추측 (0) 2023.03.19 두 개 뽑아서 더하기 (0) 2023.03.19