所以我只想查找給定數字的所有除數(除了數字本身)。 目前,我有這樣的:高效查找數字的所有因數
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