문제
Return all prime numbers from 2 through limit. A prime is an integer greater than 1 divisible only by 1 and itself. Use the sieve idea: keep the next unmarked number and mark its larger multiples as composite. List results in ascending order.
Implement sieve_primes(limit).
Input
limit: The largest number that may be included.
Output
Return the primes in ascending order, or an empty list if none exist.
제약 조건
0 ≤ limit ≤ 100,000. The upper bound is inclusive. Output tests verify results, not the exact algorithm used.
예시
입력:
limit = 12
예상 출력:
expected = [2, 3, 5, 7, 11]
입력:
long long limit = 12;
예상 출력:
std::vector<long long> expected = {2, 3, 5, 7, 11};
입력:
long limit = 12;
예상 출력:
long[] expected = new long[] {2, 3, 5, 7, 11};
설명
Mark multiples of 2 and 3 as composite. The remaining values up to 12 are 2, 3, 5, 7, and 11.
입력:
limit = 1
예상 출력:
expected = []
입력:
long long limit = 1;
예상 출력:
std::vector<long long> expected = {};
입력:
long limit = 1;
예상 출력:
long[] expected = new long[] {};
설명
Prime numbers begin at 2, beyond this limit.
접근 방법
먼저 스스로 풀어 본 뒤 힌트를 하나씩 열어 보세요.
힌트 1
표시되지 않은 소수 후보부터 합성수를 표시하고, limit까지 계속 진행하세요.
힌트 2
마지막까지 표시되지 않은 수만 소수입니다.
힌트 3
후보의 제곱이 limit를 넘으면 배수 표시를 멈추세요.
예상 복잡도
시간 O(n log log n), 추가 공간 O(n)
참고 자료
이 문제는 CodeUtility에 맞게 수정되었습니다. 위의 설명과 제한 조건을 따르세요.