格納に大きな素数のデータベース
-
19-09-2019 - |
質問
この問題を襲ったとしてビットと覗けます。思いが表現のリストを盛りの数字の改善に取り組んでいます。●わからないので単一のデータ型が可能でacuratlyで一貫した店舗を大量に盛ります。私の懸念は、素数点を含む1000番台の桁があるかもビットが参考にデータベースです。があるので、表示できな素数にDB?私はここのことが話題にしていた。
問題の一つであることが困難である素数です。的なものしか開発されておらず、この問題がより簡単にするものである。
解決
、別の事があります。シーケンスが注文した任意の数の係数のリストに保存します。
小例:
2831781 == 2*100^3 + 83*100^2 + 17*100^1 + 81*100^0
一覧です:
81, 17, 83, 2
実際のアプリケーションで処理アプリケーションにおける素数がバイト配列として格納されている特別な場合、2 ^ 32(32ビット整数)の弾性率によって分割することが有用である。
DBで保管ます:
create table PRIMES
(
PRIME_ID NUMBER not null,
PART_ORDER NUMBER(20) not null,
PRIME_PART_VALUE NUMBER not null
);
alter table PRIMES
add constraint PRIMES_PK primary key (PRIME_ID, PART_ORDER) using index;
上記の例ではインサート(1647は、例えばのみ)
insert into primes(PRIME_ID, PART_ORDER, PRIME_PART_VALUE) values (1647, 0, 81);
insert into primes(PRIME_ID, PART_ORDER, PRIME_PART_VALUE) values (1647, 1, 17);
insert into primes(PRIME_ID, PART_ORDER, PRIME_PART_VALUE) values (1647, 2, 83);
insert into primes(PRIME_ID, PART_ORDER, PRIME_PART_VALUE) values (1647, 3, 82);
prime_id値は、Oracle配列から割り当てることができます...
create sequence seq_primes start with 1 increment by 1;
次の素数のIDを挿入するには、Getます:
select seq_primes.nextval from dual;
指定されたIDを持つ素数のコンテンツを選択します:
select PART_ORDER, PRIME_PART_VALUE
from primes where prime_id = 1647
order by part_order
他のヒント
あなたは、バイナリデータとして保存できます。彼らはまっすぐに、データベースから読める人間ではありませんが、それは問題になることはありません。
データベースは、日常正確38〜39桁までの数字を格納することができます。それは合理的にはるかにあなたを取得ます。
それ以上に、あなたは(あなたの特定のデータベースのために存在する可能性がある任意の精度のモジュールがなければ)データベースに(正確に)それらに算術演算を実行することはありません。しかし、数字は数千桁にテキストアップとして保存することができます。その向こうあなたは数字の何百万人を格納するCLOB型のフィールドを使用することができます。
また、それはあなたが素数の列を保存しているし、あなたの興味が、その配列のスペースで圧縮している場合は、1つの番号と次のではなく、全体の数の違いを格納することによって開始することができ、何も価値があります。
これは少し非効率的ですが、文字列としてそれらを格納することができます。
あなただけの彼らのバイナリ表現のビット列として保存、これらの番号をデータベース側の計算を使用しない場合(BLOB
、VARBINARY
など。)
たった2セントです。したい場合は店舗としての数値データベースをご連絡させていただきます。制約される最大サイズの整数データベースも取付けることができます。いう2列テーブルの素数を一列でシーケンス番号のです。そしてまた一部の指標を探格納された値です。
だんいんたいお店を表(sp?) 素数を超えて任意の整数datatypeんだものだ。と言うことで回避姿勢が文字列なのでバイナリーへすでに使用されています。(こう。) あり、店してBLOBデータベースがどのような施設のDBMSを提供するn-thムまたはチェックのprimenessの候補の整数?
どのように設計に適したファイル構造ですか?このように後約5分の思考:
- セットカウンターには2.
- 書のビットを表す最初のみんなで作ろう!
- 書き再びマークの部分を含む2ビット素数.
- カウンタのカウンター+1
- の3つのビット深ます。(思いがあり:5および7)
- 書の最後は3ビット素数を再びマークの部分を含む3ビット素数.
- 戻4を規定を準用する。
に書かれており、最後のn-bit倍総理が提供する手段の特定のファイルの一部とn-bit素数できるファイルの読み取りです。
として書きファイルのつかまいのオフセットのファイルは、さまざまな点でもの各部門を含むn-bit素数.
こういう対応素数2^(最大級の符号なし整数で表).いりやすいと思いますがコードを翻訳する325467ビット(い)値に大きな整数です。
だが、ここのファイルとしてBLOBありません(だん。
これは、すべてあなたが数字で何をしたいのか操作の種類に依存します。ただ保存および検索した場合、その文字列だけを使用し、それらが数字であることを強制するために、チェック制約/ドメインのデータ型を使用します。あなたはより多くの制御をしたい場合は、PostgreSQLは、あなたがカスタムデータ型を定義できますのそして、機能。あなたは GMP のライブラリとインスタンス・インタフェースのための任意精度の整数の正しい順序付けや算術を持っていることができます。そのようなライブラリを使用することも、あなたは数字が本当にプライムあるかどうかを確認するために確率的素数判定テストを使用してチェック制約を実装できるようになる。
本当の問題は、リレーショナル・データベースは、仕事のための正しいツールであるかどうか、実際にある。
私はあなたのBLOBを使用してオフ最高だと思います。データは、お使いのBLOBに格納されてどのように数字の使用目的によって異なります。あなたが計算でそれらを使用したい場合は、私はあなただけで、それらを表示する必要がある場合は、など、注文したバイナリ値のいくつかの様々なとして値を格納し、それらを数値として扱うことができるようにするクラスや型を作成する必要があると思います文字のシーケンスとしてそれらを格納することは十分であろう、と大きな値のために非常に時間がかかることができ、表示可能なもののために、計算可能な値を変換する必要がなくなる。
を共有し、お楽しみください。
おそらく華麗ではないが、あなたは、いくつかの再帰的なデータ構造でそれらを保存した場合どのような。あなたはint型、それの指数、下位ビット数を基準として、それを格納することができます。
の文字列のアイデアのように、それはおそらくメモリの配慮のために非常に良いではないであろう。そして、クエリ時間は、クエリの再帰的性質のために増加したことになる。