-5

サンプルコード:

bool is_special_prime (int N) {
  QHash<int, int> o;
  struct A_functor
  {
    int operator()(unsigned int n) { return n >> __builtin_ctz(n);}
  }A;
  int k = A(N + 1);
  if(k == 1)
    return 0;
  o[k] = k;
  int t = (N - 5) >> 1;
  for(int i = 0; i < t; i++) {
      k = A(N + k);
      if(k == 1 || o.contains(k))
        return 0;
      o[k] = k;
  }
  return 1;
}

この方法で、最新の最大の素数 2 ^ 57885161 − 1 より大きい数値をテストできますか?

4

3 に答える 3

1

32ビットシステムでint範囲内の数値を保持できる型を渡しています。-2^31 to 2^31-1あなたが言及した多くの注文をテストするためにそれを使用することはできません

于 2013-05-03T12:12:34.280 に答える
1

この方法で、最新の最大の素数 2 ^ 57885161 − 1 より大きい数値をテストできますか?

int少なくとも 57885162 ビット幅のプラットフォームを使用している場合は、そうです (アルゴリズムが正しいと仮定すると、わざわざチェックしませんでした)。

さて、ほんの数秒、真剣に考えてみましょう。最近のコンシューマー グレードのコンピューターでは、最大で 64 ビット幅の整数を使用しているため、その仮想プラットフォームからはかなり遠いことがわかります...

intそのような計算を実行したい場合は、BigNum ライブラリに置き換える必要があります (途中で他の制約も発生します。気を引き締めてください)。

于 2013-05-03T12:17:31.003 に答える