2012-01-18 4 views
1

既知の最大値を持つカウンター(max)があります。 maxは大きくてもかまいません(実際には36^40 - 1または62^40 - 1)。既知の最大値を持つ順序のないカウンターを得るために双射を作成する

私は、次のプロパティを持つ[0..max]から[0..max]への全単射bをしたい:b(n+1)b(n)から簡単に推測ではありません。

私はではありません。暗号で安全な機能を検索すると、できるだけ多くのエントロピーでカウンタの出力を少し難読化したいだけです。

この関数はPHPで実行可能でなければなりません。これにより、PHPが行うすべての関数が許可されます。

+0

これを行うにはどのようなアイデアがありますか?あなたはいつどの時点で立ち往生しましたか? – PengOne

+0

なぜb^2 = 1が必要ですか?それは非常に強い制限のように思えます。 –

+0

大きな数値を扱う場合は、おそらくPHPでGMPライブラリを使用する必要があります。ちょうどFYI。 –

答えて

3

この質問は現状では答えることはできません。

b(n+1)b(n)

から容易に推測可能でない基準は明確に定義されません。メトリックまたは定量化可能な制約はありません。あなたは「」と書いているので、暗号で安全な機能を探している人はであり、「誰でもその機能を見つけてもらえません」というコメントには、バイジェクションがなぜ必要なのかはっきりしていません。

しかし、ここでは、あなたが喜んでいるバイジェクションを見つけたり、他の人が助けることができるように質問を明確にするのに役立ついくつかのアイデアがあります。

任意の線形多項式可逆モジュロmaxが動作します。これは、フォーム

b(n) = a*n + b mod max 

の多項式であるあなたの漠然とした制約を満たすように思われ、b(n) = nようにしている場合のみ

gcd(a,max) = 1 

最も簡単な場合には、a=1b=0であれば全単射を与えます。

あなたはそれを空想を取得したい場合は、あなたが頻繁にabを変更することができ、乱数を生成することと言う(ただし、gcd(a,max) = 1か、全単射を取得することはできませんことを確認してください)。

+0

ありがとう、私が探していたものをくれた。好奇心の外に、バイジェクションであることが保証される異なる程度の多項式を持つ方法はありますか?他の度合いの制約は何ですか? – Frizlab

+1

@Frizlab関数の可逆性が高いかどうかは、maxの理論的性質の数に依存します。興味深い質問ですが、その答えは、あなたのアプリケーションから離れて、数論に遠ざかります。 – PengOne

+0

'gcd(a、max)= 1'が常に' a'の素数を選ぶのが最も簡単な方法です。 – caf

関連する問題