メルセンヌ素数を見つけるプログラムを作成しようとしています。unsigned long long 型を使用して、(2^61)-1 である 9 番目のメルセンヌ素数の値を特定できました。より大きな値の場合、2^64 より大きい整数値を格納できるデータ型が必要になります。
、、、、など*
の演算子をこのデータ型で*=
使用できるはずです。>
<
%
メルセンヌ素数を見つけるプログラムを作成しようとしています。unsigned long long 型を使用して、(2^61)-1 である 9 番目のメルセンヌ素数の値を特定できました。より大きな値の場合、2^64 より大きい整数値を格納できるデータ型が必要になります。
、、、、など*
の演算子をこのデータ型で*=
使用できるはずです。>
<
%
C ネイティブの型でやりたいことはできませんが、GNU Multiple Precision Arithmetic Library のように、任意に大きな数を処理できるライブラリがあります。
多数の数値を格納するには、多くの選択肢があります。以下に優先度の低い順に示します。
1)上記の言語、つまりCに対して、github、codeflexなどで他の人が開発したサードパーティのライブラリを使用します.
2) 組み込みの多数の処理機能を持つ Python、BigNum をサポートする Java、または C++ などの他の言語に切り替えます。
3) 独自のデータ構造を開発します。これは、C++ の複素数ライブラリがこのように開発されたのと同じように、加算、減算、乗算などのカスタム操作を使用して、文字列 (100 文字の長さは 100 桁の数字を指す場合があります) の観点から作成できます。 . この選択は、研究および教育目的のためのものです。
これらの人々が基本的に言っていることは、64ビットCPUは命令だけでこれらの巨大な数を追加することはできず、それらの数を追加できるアルゴリズムが必要だということです. このようなアルゴリズムでは、2 つの数値を別々に処理する必要があります。
そして、彼らがリストしたライブラリを使用すると、それを行うことができます。自分で開発することをお勧めします(アルゴリズム/関数だけで、それがどのように行われるかを学ぶことができます)。
64 ビットを超えるデータ型を持つ標準的な方法はありません。システムのドキュメントを確認する必要があります。一部のシステムでは 128 ビット整数が定義されています。ただし、実際に柔軟なサイズの整数を使用するには、たとえば配列を使用して、別の表現を使用する必要があります。次に、演算子=
、<
、>
などを定義するのはあなた次第です。
幸いなことに、 GMPなどのライブラリでは、任意の長さの整数を使用できます。
GNU MP Bignum Libraryを見てください。