#include <iostream>
#include <cmath> // sqrt 사용을 위해
using namespace std;
// 소수 판별 함수 구현
// n: 소수인지 확인할 숫자
// 리턴: 1(소수) 0(소수아님)
int sosu(int n) {
int i, max_n;
if(n == 1) return 0; // 1은 소수가 아님
max_n = (int)sqrt(n); // 제급근까지만 나누어지는 수를 체크하면 됨.
for(i = 2; i <= max_n; i++) {
if(n % i == 0) return 0; // 나누어 떨어지면 소수가 아님
}
return 1; // 나누어 떨어진 수가 없으면 소수
}
int main() {
// 소수 갯수를 찾는 케이스가 여러개 주어지므로,
// 속도를 위해 미리 배열에 소수를 계산해 넣어 둔다.
// 배열의 인덱스값을 숫자로 간주하고 소수가 아니면 0, 소수이면 1로 설정한다.
int i, n, n2, count, max = 123456*2;
int a_sosu[123456*2+1] = {0}; // 소수를 담아둘 배열
for(i = 2; i <= max; i++) { // 1부터 주어진 최대수 123,456 의 2n까지 계산해 둠.
a_sosu[i] = sosu(i); // 소수 판별값을 대입
}
while(1) { // 무한루프
cin >> n; // 값을 하나씩 입력 받아 정수형으로 변환해서 대입
if(n == 0) break; // 0 값이 들어오면 루프 끝냄
count = 0; // 소수 개수 카운트
n2 = n*2;
for(i = n+1; i <= n2 ; i++) { // n ~ n*2까지 루프
if(a_sosu[i] == 1) count++; // 1(소수) 이면 카운트 증가
}
cout << count << "\n"; // 소수 개수 출력
}
return 0;
}