Потому, что s = q * r. И если s делится на q, то оно делится и на r = s / q.
При этом ВСЕГДА: min(q, r) <= √s, а max(q, r) >= √s.
Это вопрос не на программирование, а на знание элементарной школьной арифметики.
Другое дело, что может быть ситуация, когда q = r (s является квадратом целого числа). В этом случае надо добавлять в массив ОДИН делитель, а приведённый тобой код этот вариант никак не учитывает.