Для заданного натурального
числа n найдите и выведите его
наименьший делитель, отличный от 1.
Вход.
Одно натуральное число n (1 < n < 231).
Выход.
Выведите наименьший делитель числа n,
отличный от 1.
Пример входа |
Пример выхода |
21 |
3 |
простые числа
Переберем все
возможные делители числа n в
диапазоне от 2 до включительно и найдем минимальный. Если
делителей в интервале [2; ] не обнаружится, то ответом будет само число n.
Пример
Если n = 21, то наименьшим делителем будет 3.
Если n = 13 (простое число), то наименьшим делителем будет 13.
Реализация алгоритма
Читаем
входное число n.
scanf("%d", &n);
Инициализируем flag = 0. Перебираем возможные делители числа n в
диапазоне от 2 до включительно. При
нахождении первого (наименьшего) делителя устанавливаем flag = 1, выводим найденный делитель и завершаем выполнение цикла.
flag = 0;
for (i = 2; i <= sqrt(n); i++)
if (n % i == 0)
{
printf("%d\n", i);
flag = 1;
break;
}
Если делитель не был найден, то число n является простым. В этом случае выводим само число n.
if (flag == 0)
printf("%d\n", n);
Java реализация
import
java.util.*;
class
Main
{
public static void main(String[] args)
{
Scanner con = new Scanner(System.in);
int n = con.nextInt();
int flag = 0;
for (int i = 2; i <= Math.sqrt(n); i++)
if (n % i == 0)
{
System.out.println(i);
flag = 1;
break;
}
if (flag == 0) System.out.println(n);
con.close();
}
}
Python реализация
import math
Читаем входное число n.
n = int(input())
Перебираем
возможные делители числа n в диапазоне от 2 до включительно. При нахождении первого (наименьшего) делителя выводим
его и
завершаем выполнение цикла.
for i in
range(2, math.isqrt(n)+1):
if n % i == 0:
print(i)
break
Если цикл
завершается естественным образом (без использования break), то
выполняется блок else.
Если
делитель не был найден, то число n является простым. Выводим само число n.
else: # сюда попадем
когда цикл закончится сам
print(n)