Что касается причины принятого ответа нифа:
Это нормально для проблемы в Эйлере, но не делает это эффективным решением в общем случае. Почему бы вам попробовать четные числа для факторов?
- Если n четное, сдвинуть влево (разделить на
2) пока его больше нет. Если это
один, то 2 является наибольшим простым
фактор.
- Если n не четное, вам не нужно
проверить четные числа.
- Это правда, что вы можете остановиться на
SQRT (п).
- Вы должны только проверять простые числа для
факторы. Это может быть быстрее, чтобы проверить
k делит п, а затем проверить его
хотя для простоты.
- Вы можете оптимизировать верхний предел
муха, когда вы найдете фактор.
Это привело бы к некоторому коду, подобному этому:
n = abs(number);
result = 1;
if (n mod 2 = 0) {
result = 2;
while (n mod 2 = 0) n /= 2;
}
for(i=3; i<sqrt(n); i+=2) {
if (n mod i = 0) {
result = i;
while (n mod i = 0) n /= i;
}
}
return max(n,result)
Есть некоторые тесты по модулю, которые являются излишними, так как n никогда не может быть разделено на 6, если все факторы 2 и 3 были удалены. Вы можете разрешить только простые числа для меня.
В качестве примера рассмотрим результат для 21:
21 не является четным, поэтому мы переходим к циклу for с верхним пределом sqrt (21) (~ 4.6).
Затем мы можем разделить 21 на 3, поэтому result = 3 и n = 21/3 = 7. Теперь нам осталось протестировать только до sqrt (7). который меньше 3, так что мы закончили с циклом for. Мы возвращаем максимум n и результат, который равен n = 7.