【发布时间】:2015-03-22 13:31:23
【问题描述】:
我正在尝试获取 64 位整数(大于 32 位)的除数
我的第一种方法(对于小数)是将数字除以直到结果数为 1,计算匹配素数的数量并使用公式 (1 + P1)(1+ P2) ..*(1 + Pn) = 除数数
例如:
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 的方法来使用平方数进行因式分解。现在使用我的脚本会容易得多,因为数字要小得多。
我的问题是,我该如何实现这个二次筛?
【问题讨论】:
-
你要写一个大程序,所以你的问题太宽泛了。
-
我的问题是二次筛的伪代码,这不是一个大程序吗?
标签: primes quadratic factorization sieve