所以我只想查找给定数字的所有除数(除了数字本身)。 目前,我有这样的:高效查找数字的所有因数
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;
}
其中素数是素数的列表,(假设它是正确的,足够大)。 该算法的工作原理是它可以找到所有的素数因子,但不是所有的因子(即给出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;
}
关于如何解决的第一个,或如何创建组合从塞康列表中的任何想法d一个(我宁愿那样会更快)?
的可能的复制[最佳在C#中查找给定数字的所有因素的方法](http://stackoverflow.com/questions/239865/best-way-to-find-all-factors-of-a-given-number-in-c-sharp ) – MxNx 2016-10-03 11:53:49