【发布时间】:2011-08-13 04:12:34
【问题描述】:
所以我只想找到给定数字的所有除数(数字本身除外)。 目前,我有这个:
public static List<int> proper_divisors(int x)
{
List<int> toreturn = new List<int>();
toreturn.Add(1);
int i = 0;
int j=1;
int z = 0;
while (primes.ElementAt(i) < Math.Sqrt(x))
{
if (x % primes.ElementAt(i) == 0)
{
toreturn.Add(primes.ElementAt(i));
toreturn.Add(x / primes.ElementAt(i));
j = 2;
z = (int)Math.Pow(primes.ElementAt(i), 2);
while (z < x)
{
if (x % z == 0)
{
toreturn.Add(z);
toreturn.Add(x / z);
j++;
z = (int)Math.Pow(primes.ElementAt(i), j);
}
else
{
z = x;
}
}
}
i++;
}
toreturn = toreturn.Distinct().ToList<int>();
return toreturn;
}
其中 primes 是一个素数列表(假设它是正确的,并且足够大)。 该算法的工作原理是它找到所有主要因素,但不是所有因素(即给定 34534,它返回 {1,2,17267,31,1114} 但错过 {62, 557} 因为 62 是一个组合,因此也错过了 557。
我也尝试过获取一个数字的质因数,但我不知道如何将其转换为所有正确组合的列表。
该算法的代码如下:
public static List<int> prime_factors(int x)
{
List<int> toreturn = new List<int>();
int i = 0;
while (primes.ElementAt(i) <= x)
{
if (x % primes.ElementAt(i) == 0)
{
toreturn.Add(primes.ElementAt(i));
x = x / primes.ElementAt(i);
}
else
{
i++;
}
}
return toreturn;
}
关于如何修复第一个或如何从第二个创建组合列表的任何想法(我更喜欢这样,因为它会更快)?
【问题讨论】:
-
我发现这篇文章也很有帮助 - codereview.stackexchange.com/questions/237416/…
标签: c# prime-factoring factorization