知识点:筛选法求素数
原理:素数的倍数一定不是素数,从2开始,把素数的倍数全去掉。
//素数筛选法模板
/*如果把prime放在main外,prime自动赋值为0,省去一次循环赋值,所以用
*prime[i]==0表示是素数,否则不是素数
*/
bool prime[max];
prime[0] = prime[1] = true;
int mid = (int)sqrt((double)max);
for (int i = 2; i <= mid; ++i) {
if (!prime[i]) {
for ( int j = i + i; j <= max; j += i) {
prime[j] = true;
}
}
}
#include <cstdio>
bool prime[10001];
int main() {
for (int i = 2; i <= 100; ++i) {
if (!prime[i]) {
for (int j = i + i; j <= 10000; j += i) {
prime[j] = true;
}
}
}
int n;
while (scanf("%d", &n), n) {
int cnt = 0;
for (int i = 2; i <= n/2; ++i) {
if(i < n-i && !prime[i] && !prime[n-i]) {
++cnt;
}
}
printf("%d\n", cnt);
}
return 0;
}