1

Pollard の Rho と Brent のアルゴリズムの両方を使用して、BigInteger を使用して VB.Net に実装された素因数分解の優れたソリューションがあります( https://stackoverflow.com/a/31978350/44080を参照) 。

N< 2^63私は、十分に大きく、おそらく (はるかに? ) 高速UInt64であるべきだと信じています。

ただし、私のUInt64変換は次の行で失敗します:

y = ((y^2) Mod n + c) Mod n 'fails when y^2 > UInt64.Max

この行を次のように変更します

y = CULng((CDbl(y^2) Mod n + c) Mod n)

型変換がループしているため、パフォーマンスが低下します。

どうすればこれを修正できますか?

上記の問題を回避できれば、UInt64 は BigInteger よりも優れたパフォーマンスを発揮すると思います。

編集:

私はちょうどこれを見つけました:.Net BigIntegerを実行するInt128とInt256を持っていると主張するDirichlet .NET Number Theory Library 。

素数因数分解用に最適化されたアルゴリズムもいくつかあります。2 日間の調査とテストを節約できたはずです。

4

1 に答える 1