问题
思路
素数筛法筛出来,判断即可。
这个题用素数筛法筛出来,判断的复杂度也比较低。我第一次用集合就慢。
代码
#include <iostream>
#include <string.h>
#define N 1024
int flag[N]; // flag[i] = 0, iff i is prime number
void generate_prime_table(){
memset(flag, 0, sizeof(flag));
for(int x = 2; x < N; ++x){
if( flag[x] ) continue;
else{
for(int j = x*x; j < N; j += x){
flag[j] = 1;
}
}
}
}
int main( void ){
generate_prime_table();
int n = 0;
while( std::cin >> n ){
int ans = 0;
for(int x = 2; x <= n/2; ++x){
if( !flag[x] && !flag[n-x] ) ++ans;
}
std::cout << ans << std::endl;
}
return 0;
}