我正在尝试获取 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();
}
但是对于大整数,这种方法需要多次迭代。我找到了一种名为Quadratic sieve的方法来使用平方数进行因式分解。现在使用我的脚本,这会容易得多,因为数字要小得多。
我的问题是,我怎样才能实现这个二次筛?