解いた問題のソースコードと解説など。


POJ 2909 Goldbach's Conjecture

問題

4以上の整数は2つの素数の和で表せる、という予想をゴールドバッハ予想という。4以上2^15以下の整数nが与えられるので和がnとなるような素数の組数を返せ。ただし(p1,p2)という組と(p2,p1)という組を別々に数えてないけない。

やりかた

エラトステネスの篩をしてから(i,n-i)が該当する組になるかを調べていけばいい。

POJ 2262とほぼ一緒

以下ソース。

bool sieve[1 << 16];

int main(int argc, char **argv){
  FILL(sieve, true);
  sieve[0] = sieve[1] = false;
  for(int i = 2; i <= 1 << 15; i++)
    for(int j = 2 * i; j <= 1 << 15; j += i)
      sieve[j] = false;

  int n;
  while(cin >> n, n){
    int cnt = 0;
    for(int i = 2; i <= n - i; i++)
      cnt += (sieve[i] && sieve[n - i]);
    cout << cnt << endl;
  }
}
Get up! 明日のSUPER ST@R!