그래서 주어진 숫자의 모든 제수를 찾고 싶습니다 (숫자 자체 제외). 현재는,이 있습니다숫자의 모든 제수를 효율적으로 찾는 것
소수의 목록입니다 소수가 (이 올바른지 가정하고 충분히 큰)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;
}
첫 번째 문제를 해결하는 방법에 대한 아이디어 나 secon에서 조합 목록을 만드는 방법 d 하나 (나는 그것이 더 빠를 것이 더 좋아)?
가능한 복제 [최저 :
을하거나 그냥 목록을 원하는 경우 방법은 C에서 주어진 숫자의 모든 요소를 찾을 수 #] (http://stackoverflow.com/questions/239865/best-way-to-find-all-factors-of-a-given-number-in-c-sharp) – MxNx