챌린지 목록으로 돌아가기
보통 0명 해결 정답률 0%

주어진 한계 미만의 소수의 합

주어진 한계 미만의 모든 소수를 더하세요.

배우게 될 내용

  • 체로 상한 미만의 소수 모두 찾기
  • 하나씩 검사하는 대신 배수 표시하기
  • 효율적으로 합계 구하기

문제

원문 보기 (영어)

소수란 1보다 크고 1과 자기 자신으로만 나누어지는 정수입니다. 주어진 limit보다 엄격히 작은 모든 소수를 더하세요. limit 값 자체가 소수여도 포함하지 않습니다.

prime_sum(limit)을 구현하세요.

입력

limit: 제외 상한값입니다.

출력

조건에 맞는 소수들의 합을 반환하세요. 소수가 하나도 없으면 0을 반환합니다.

제약 조건

0 ≤ limit ≤ 2,000,000. 합은 부호 있는 64비트 정수(signed 64-bit integer)로 반환하세요.

예시

예시 1
입력:
limit = 12

예상 출력:
expected = 28
입력:
long long limit = 12;

예상 출력:
long long expected = 28;
입력:
long limit = 12;

예상 출력:
long expected = 28;

설명

12 미만의 소수는 2, 3, 5, 7, 11이며, 이들의 합은 28입니다.

예시 2
입력:
limit = 2

예상 출력:
expected = 0
입력:
long long limit = 2;

예상 출력:
long long expected = 0;
입력:
long limit = 2;

예상 출력:
long expected = 0;

설명

2 미만에는 소수가 없습니다.

접근 방법

먼저 스스로 풀어 본 뒤 힌트를 하나씩 열어 보세요.

힌트 1

핵심은 소수를 효율적으로 찾는 것입니다. 매 수마다 나눠보는 방식은 너무 느립니다.

힌트 2

체처럼 합성수를 표시한 뒤, 표시되지 않은 수들만 더해서 limit 이하의 소수를 합산하세요.

힌트 3

limit 자체는 소수여도 제외되며, 작은 limit에서는 더할 값이 없을 수도 있습니다.

예상 복잡도

시간 O(limit log log limit), 추가 공간 O(limit)

참고 자료

이 문제는 CodeUtility에 맞게 수정되었습니다. 위의 설명과 제한 조건을 따르세요.

다른 사람의 풀이 보기

커뮤니티 솔루션

아직 공개된 풀이가 없습니다. 문제를 풀고 첫 풀이를 공유하세요.