Все числа, которые равномерно делятся на x.
Я положил в 4, он возвращает: 4, 2, 1
edit: Я знаю, что это звучит домашнее задание. Я пишу небольшое приложение, чтобы заполнить некоторые таблицы продуктов полудиагностическими данными. Два свойства - ItemMaximum и Item Multiplier. Мне нужно убедиться, что множитель не создает нелогичную ситуацию, при которой покупка еще одного предмета будет превышать максимально допустимый порядок. Таким образом, факторы предоставят список допустимых значений для моих тестовых данных.
изменить ++: Это то, с чем я пошел после всей помощи от всех. Еще раз спасибо!
edit #: Я написал 3 разных версии, чтобы увидеть, что мне понравилось, и проверил их против факторинга небольших чисел и очень больших чисел. Я вставлю результаты.
static IEnumerable<int> GetFactors2(int n)
{
return from a in Enumerable.Range(1, n)
where n % a == 0
select a;
}
private IEnumerable<int> GetFactors3(int x)
{
for (int factor = 1; factor * factor <= x; factor++)
{
if (x % factor == 0)
{
yield return factor;
if (factor * factor != x)
yield return x / factor;
}
}
}
private IEnumerable<int> GetFactors1(int x)
{
int max = (int)Math.Ceiling(Math.Sqrt(x));
for (int factor = 1; factor < max; factor++)
{
if(x % factor == 0)
{
yield return factor;
if(factor != max)
yield return x / factor;
}
}
}
В тиках. При факторизации числа 20, 5 раз каждый:
- GetFactors1-5,445,881
- GetFactors2-4,308,234
- GetFactors3-2,913,659
При умножении числа 20000 на 5 раз:
- GetFactors1-5,644,457
- GetFactors2-12,117,938
- GetFactors3-3,108,182