/* チェビシェフの定理の確認 */
#include <stdio.h>
#define MAX_PRIME_AMOUNT 70000 // 最大の素数の個数
#define MAX 123456 // 入力される値の上限

void get_primes(int*, int); // 指定された上限までの素数を全て求めて配列に格納

int main(void) {
  int primes[MAX_PRIME_AMOUNT]; // 素数の配列
  int n, i;
  int count; // nから2nまでにある素数の個数
  
  get_primes(primes, MAX*2); // MAX*2までの素数をすべて求める
  
  while (scanf("%d", &n) != EOF) { // nに数値を読み込んで
    

    if (n == 0) // nが0なら終了
      break;
    
    count = 0;
    for (i=0; primes[i] <= 2*n; i++) { // 素数がn*2を越えない間
      if (primes[i] > n) // n<p<=2nだったら
	count++; // 個数をカウント（インクリメント）
    }
    
    printf("%d\n", count); // 個数を表示
  }

  return 0;
}


/* 2からmaxまでの素数をすべて求めて配列primeに格納 */
void get_primes(int *prime, int max) {
  int n, i;
  int prime_amount; // 現在求めた素数の個数
 
  prime[0] = 2; // 一番初めの素数は2
  prime_amount = 1; 
  for (n=3; n<=max; n++) { // nが素数かどうか調べる
    for (i=0; i<prime_amount; i++) { // 現在求めた素数で
      if (n % prime[i] == 0) // nがわり切れるかどうか調べる
	break;
    }

    /* もし、現在求めた素数でnが全て割り切れなかったら、nは素数 */
    if (i == prime_amount) { // iがprime_amountと等しかったら、最後までnは割り切れなかったので
      prime[prime_amount] = n; // nは新たな素数
      prime_amount++; // 個数をひとつ増やす
    }
  }

}
	 