64 ビット整数 (32 ビットより大きい) の約数を取得しようとしています。
私の最初の方法 (小さい数値の場合) は、結果の数値が 1 になるまで数値を除算し、一致する素数の数を数え、式 (1 + P1) (1+ P2) ..*(1 + Pn) = Numberを使用することでした。約数
例えば:
24 = 2 * 2 * 2 * 3 = 2^ 3 * 3^ 1
==> ( 3 + 1)*( 1 + 1) = 4 * 2 = 8 除数
public static long[] GetPrimeFactor(long number)
{
bool Found = false;
long i = 2;
List<long> Primes = new List<long>();
while (number > 1)
{
if (number % i == 0)
{
number /= i;
Primes.Add(i);
i = 1;
}
i++;
}
return Primes.ToArray();
}
しかし、大きな整数の場合、このメソッドは多くの反復を必要とします。2乗数を使って因数分解するQuadratic sieveという方法を見つけました。私のスクリプトを使用すると、数値がはるかに小さいため、これははるかに簡単になります。
私の質問は、この Quadratic Sieve をどのように実装できますか?