잘못 구현한 에라토스테네스의 체
시간 제한1초메모리 제한512 MB
바깥 변수 i가 1부터 n까지 갈 때 안쪽 반복문이 i씩 건너뛰며 도는 코드에서 몸체가 실행되는 총 횟수를 n이 10^9까지일 때 구한다.
문제
성원이는 수업에서 에라토스테네스의 체를 배운 뒤 기억에 의존해 C++로 구현했다. 옆에 있던 형석이는 코드가 틀렸음을 지적했고 두 사람은 6번째 줄의 실행 횟수를 직접 세어 보기로 했다. 그 작업을 대신 받아 이 주어졌을 때 6번째 줄이 몇 번 실행되는지 구한다.
코드는 다음과 같다.
int n;
cin >> n; // read n
int* sieve = new int[n + 1];
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j += i) {
sieve[j] += 1; // 6번째 줄
}
}
바깥 루프는 를 부터 까지 돈다. 안쪽 루프는 를 부터 시작해 씩 증가시키며 을 넘지 않는 동안 돈다. 6번째 줄은 안쪽 루프의 몸통이며 그 총 실행 횟수를 구하는 것이 과제이다.
입력
첫째 줄에 자연수 이 주어진다. 를 만족한다.
출력
첫째 줄에 6번째 줄이 실행되는 총 횟수를 출력한다.