Возврат массива из метода, как работает цикл for?

Есть цикл for в методе FindFactors, который ищет множитель числа, в условии сказано: пока i < num/2 + 1, я понимаю, что /2 + 1 нужно чтобы цикл не сохранил само число, но если это убрать, то все останется таким же, если сделать запись num + 1, то тогда уже цикл сохранит само число. Дак в каких случаях будет нужна запись num/2 + 1? Вот код:

class Factor
{
    public int[] FindFactors(int num, out int numfactors)
    {
        int[] facts = new int[80];
        int i, j;

        for (i = 2, j = 0; i < num/2 + 1; i++)
        {
            if ((num % i) == 0)
            {
                facts[j] = i;
                j++;
            }
        }

        numfactors = j;
        return facts;  
    }
}

class FindFactors
{
    static void Main()
    {
        Factor f = new Factor();
        int numfactors;
        int[] factors;

        factors = f.FindFactors(1000, out numfactors);

        Console.WriteLine("Множители числа 1000: ");
        for (int i = 0; i < numfactors; i++)
        {
            Console.WriteLine($"{factors[i]}");
        }

        Console.WriteLine();
    }
}

Ответы (2 шт):

Автор решения: MBo

num/2 используется, чтобы сократить количество итераций - ведь между этим значением и num точно нет делителей. Если само num нужно, просто отдельно его запишите.

Ещё разумнее было бы сделать цикл до корня из числа, сведя количество операций к sqrt(num), записывая сразу пару делителей

while (i*i < num) {
  if ((num % i) == 0)
        {
            facts[j] = i;
            j++;
            facts[j] = num / i;
            j++;
        }
   i++; 
}
if (i*i == num) {
      facts[j] = i;
      j++;
 }
→ Ссылка
Автор решения: Grundy

я понимаю, что /2 + 1 нужно чтобы цикл не сохранил само число

Нет, деление на 2 нужно для того, чтобы сократить количество итераций при поиске делителей.

Однако, сократить количество итераций можно еще больше, если идти в цикле до квадратного корня из числа.

→ Ссылка