解いた問題

10/28/2011

SRM471 Div1 Easy

愚直に試す。
class PrimeSequences {
public:
  int getLargestGenerator(int N, int D) {

    const int P = 10000000;
    static bool prime[P];
    fill(prime, prime + P, true);
    prime[0] = prime[1] = false;

    for (lli i = 2; i * i < (lli)P; ++i) {
      if (!prime[i]) continue;
      for (lli j = 2; i * j < (lli)P; ++j) {
        prime[i * j] = false;
      }
    }

    for (int i = N; 0 <= i; --i) {
      if (!prime[i]) continue;
      int cnt = 0;
      int n = i;
      while (prime[n]) {
        n /= 2;
        ++cnt;
      }
      if (D <= cnt) return i;
    }

    return -1;
  }

0 件のコメント :

コメントを投稿