усі дільники введеного числа

Основи мови 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)), що більше складності простого перебору, тому з погляду "ефективності" покращень явно не буде.

Просте рішення, що використовує перебір, що не перевищує корінь числа: