#include<iostream>
#include<string>
using namespace std;
bool _prime[10001];
bool judge(int a) //判断某个数是不是质数 ,质数返回true
{
if(a==0||a==1)
return false;
for(int i=2;i*i<=a;i++)
{
if(a%i)
continue;
else
return false;
}
return true;
}
void creat_prime(int num) //质数的维护表,这里的num,是指2-num之间,找出所有的质数。
{
int gab=2; //这个是算法的关键。我们知道,以6n,6n+1,6n+2,6n+3,6n+4,6n+5为例,
//6n,6n+2,6n+4是偶数,又6n+3是3的倍数,所以如果2与3的倍数都不理会,
//只要测试的数就只留下6n+1和6n+5而已了,因而工作量只是前面想法的2/6=1/3
//而他们之间的间隔是2,4,2,4,2,4。。。
//dis=6-dis;
for(int i=7;i<=num;i+=gab)
{
gab=6-gab;
if(judge(i))
_prime[i]=true;
}
}
int main()
{
_prime[0]=false;
_prime[1]=false;
_prime[2]=true;
_prime[3]=true;
_prime[4]=false;
_prime[5]=true;
int val=10001,ans;
creat_prime(val);
while(cin>>val&&val)
{
ans=0;
for(int j=2;j<val/2;j++)
if(_prime[j]&&_prime[val-j])
ans++;
cout<<ans<<endl;
}
return 0;
}