0

次の int を検討してください。

int start = 287729472784;

その int から、長さがわずか 3 桁の新しい int を作成する必要があります。0 から 9 までの任意の値を使用できます。

ただし、新しい int を作成するために、既存の乱数ジェネレーターの形式を使用することはできません。

モジュラーxorおよびビットシフト操作の組み合わせを使用して、何らかの方法で数値を減らすことができるかどうか疑問に思っていました。最後の桁をその前の桁と xor するなどですが、それが可能かどうかはわかりません。

基本的に、開始 int から 3 桁の long int を作成する必要があります。理想的には、開始 int の長さを 3 桁に減らします。

それが理にかなっていることを願っています。ご意見をいただければ幸いです。

ありがとう

4

3 に答える 3

3

あなたの必要性を理解することはできませんが、別の数字から3桁の数字を生成したいだけなら、モジュロ関数が役立つかもしれません:

var startNumber = 287729472784;
var modifiedNumber = startNumber % 1000;

世代ごとに変化する疑似乱数 modifiedNumber が必要な場合は、時間をミリ秒単位で使用できます。

var startNumber = 287729472784;
var modifiedNumber = startNumber * new Date().getTime() % 1000;

お役に立てば幸いです。

ヴァル

于 2012-02-19T21:34:09.510 に答える
1

最良の答えは、実際にはその最終的な数字の使用に依存します. SHA1 は最初はかなり「ランダム」であるため、% 1000 を使用するだけで十分です。探しているのがテーブルへのハッシュだけである場合は、考えられるすべての SHA1 入力の範囲にわたって適切な広がりが得られます。

ただし、3 桁の数値が入力とほとんどまたはまったく関係がない (つまり、モジュロだけではない) 変換を探している場合は、すべてのビットを結果に変換する何らかの方法が必要になります。その場合は、CRC16 などの変換をお勧めします。SHA1 値をお気に入りの CRC16 ルーチンにフィードし、そのモジュロ 1000 値を返します。ただし、一部の結果は他の結果よりも頻繁に表示されることに注意してください。

于 2012-02-19T21:39:46.887 に答える
1

うーん。私は問題を理解していませんが、...start % 1000の最下位3桁が得られますstart(ただし、負の値には注意してください)?

于 2012-02-19T21:25:34.850 に答える