#include <iostream>
#include <vector>
using namespace std;

#define MAX 1000000
typedef long long ll;

void ESieve(vector<bool> &isPrime) {
  isPrime.assign(MAX + 1, true);
  isPrime[0] = isPrime[1] = false;
  for(int i=2; (ll)i*i<=MAX; i++) {
    if(isPrime[i]) {
      for(int j=2*i; j<=MAX; j+=i) {
	isPrime[j] = false;
      }
    }
  }
}

int main() {
  
  vector<bool> isPrime;
  ESieve(isPrime);

  int n;
  while(cin>>n, n) {
    int res = 0;
    for(int i=2; i <= n/2; i++) {
      if(isPrime[i] && isPrime[n-i]) {
	res ++;
      }
    }
    cout << res << endl;
  }
  
  return 0;
}