Все числа, которые делятся поровну на x.
Я положил в 4, он возвращает: 4, 2, 1
редактировать: я знаю, это звучит домашнее задание. Я пишу небольшое приложение, чтобы заполнить некоторые таблицы продуктов полу случайными тестовыми данными. Двумя свойствами являются ItemMaximum и Item Multiplier. Мне нужно убедиться, что множитель не создаст нелогичной ситуации, когда покупка еще 1 предмета поставит ордер выше максимально допустимого. Таким образом, факторы предоставят список допустимых значений для моих тестовых данных.
редактировать ++:
Это то, с чем я пошел после помощи всех. Еще раз спасибо!
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