усі дільники введеного числа
Основи мови Java
Кількість ітерацій зменшується у багато разів, якщо брати не саме число в циклі, а його корінь. Адже квадрат кореня числа дорівнює числу (Math.pow(Math.sqrt(number), 2) == number).
Таке рішення може втратити деякі дільники. Наприклад, у числа 16 буде втрачена вісімка. Також, поняття " дільник " до того ж включає одиницю і саме число.
Щоправда, забув дописати решту.
Саме число і одиницю можна вивести спочатку і наприкінці, або розпочати цикл із одиниці, якщо це взагалі потрібно. Дільник 8 у 16 виходить розподілом 16 на 2, який вже було знайдено. Можна у циклі вивести пари: 1, 16; 2, 8, другий дільник отриманий шляхом поділу 16 перший дільник. Втрата чогось виключається. Якщо потрібно вивести дільники у порядку зростання - можна класти знайдені дільники до списку (він вже відсортовано за зростанням). Після цього додати до нього числа, отримані при розподілі 16 на n-не число, n-1 число, . 1-е число.
Тут таке питання, Ви хочете знайти всі прості дільники чи числа, або його розкладання на прості числа?
Якщо перше, то ефективніше спочатку знайти всі прості числа не перевищують корінь з вихідного числа і перебирати їх. Для пошуку простих чисел, наприклад, подивіться у вікіпедії "решета Ератосфена". Не найшвидший, але найпростіший у розумінні алгоритм.
Якщо друге, то, імхо, можна скористатися рекурсією: знайшовши нових дільник, почати пошук від (число) / (Знайдений дільник).
Ці два завдання відрізняються тільки тим, що в першому випадку прості дільники не повинні повторюватися і цікавить їх набір, а в другому один множник може входити в розкладання відразу кілька разів. Решето Ератосфена використовується для знаходження простих чисел і його обчислювальна складність складаєO(n*log(n)), що більше складності простого перебору, тому з погляду "ефективності" покращень явно не буде.
Просте рішення, що використовує перебір, що не перевищує корінь числа: