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 日間の調査とテストを節約できたはずです。