11

C ++には、数が素数であるかどうかをチェックするための組み込み関数がありますか?はいの場合、どのライブラリにありますか?

以下は私の実装です。しかし、組み込み関数があるかどうかを探していました。Googleで検索すると、ユーザーベースの実装が得られます。

int isprime(int N){
    if(N<2 || (!(N&1) && N!=2))
        return 0;
    for(int i=3; i*i<=N; i+=2){
        if(!(N%i))
            return 0;
    }
    return 1;
}
4

5 に答える 5

8

いいえ、プライムをチェックする組み込み関数はありません。

あなたが投稿した解決策は改善される可能性があります:あなたが一度i*iの平方根だけを計算するならば、それは避けることができます。N

確認したい数の範囲がわかっている場合は、繰り返し計算しないように、ふるいと地図を使用できます-http://en.wikipedia.org/wiki/Sieve_of_Eratosthenes

于 2012-06-05T12:00:55.610 に答える
6

短い答え: いいえ、そのような機能はありません。

mersenne_twister_engine標準で「プライム」という言葉が使用されるのは、クラス テンプレートが記述されている 26.5.3.2 の脚注のみです。脚注には次のように書かれています。

274) このエンジンの名前は、その周期の特性に部分的に言及しています: パラメータの適切に選択された値について、周期は大きなメルセンヌ素数に密接に関連しています。

そのような関数が存在する場合、その関数の動作を説明するために使用するため、標準にはその単語の出現回数が多くなります。

于 2012-06-05T12:01:28.047 に答える
1

C++ の「組み込み」関数はありませんが、メタプログラミングを使用してコンパイル時間を効率的に解決できます。

template <int i>
struct D
{
    D(void *);
    operator int();
};

template <int p, int i>
struct is_prime
{
    enum { prim = (p%i) && is_prime<(i>2?p:0), i>::prim };
};

template <int i>
struct Prime_print
{
    Prime_print<i-1>    a;
    enum { prim = is_prime<i,i-1>::prim };
    void f() { D<i> d = prim; }
};

struct is_prime<0,0> { enum { prim = 1 }; };
struct is_prime<0,1> { enum { prim = 1 }; };
struct Prime_print<2>
{
    enum { prim = 1 };
    void f() { D<2> d = prim; }
};

void foo()
{
    Prime_print<10> a;
}

それが役に立てば幸い

于 2012-06-05T12:15:28.973 に答える