アットウィキロゴ
Imoのアルゴリズムライブラリ
掲示板 掲示板 ページ検索 ページ検索 メニュー メニュー

Imoのアルゴリズムライブラリ

primes … 素数列挙

最終更新:

imolib

- view
メンバー限定 登録/ログイン

素数列挙

説明

エラトステネスの篩および単純な探索。

計算量

O(N1.5)

使い方

primes(n)でnまでの素数を列挙して返す。

必要なライブラリ

  • vector

ソースコード

単純探索
vector<int> primes(int n) {
  vector<int> p; p.reserve(1.26 * n / log(n)); p.pb(2);
  int s = 0, t = 4, f = 0;
  for (int i = 3; i < n; i++) {
    f = 1; rep(j, s) if (f = i % p[j], !f) break;
    if (f) if (t - i) p.pb(i); else t = p[++s] * p[s];
  }
  return p;
}

エラトステネスの篩
vector<int> primes2(int n) {
  vector<int> p; p.reserve(1.26 * n / log(n)); p.pb(2);
  int *isd = new int[n]; memset(isd, 0, sizeof(int) * n);
  for (int i = 3; i < n; i += 2) if (!isd[i])
   { p.pb(i); for (int j = i * i; j < n; j += i) isd[j] = 1; }
  delete [] isd; return p;
}

確認

なし

参考

素数関連

最近更新されたスレッド
ウィキ募集バナー