Найменший дільник#8927

Найменший дільник (Розбір)

Переберемо всі можливі дільники числа в діапазоні від до \sqrt{n} включно і знайдемо мінімальний. Якщо дільників в інтервалі [2; \sqrt{n}] не виявиться, то відповіддю буде саме число .

Приклад

Якщо n = 21, то найменшим дільником буде .

Якщо n = 13 (просте число), то найменшим дільником буде .

Реалізація алгоритму

Читаємо вхідне число .

scanf("%d", &n);

Ініціалізуємо flag = 0. Перебираємо можливі дільники числа в діапазоні від до \sqrt{n} включно. При знаходженні першого (найменшого) дільника встановлюємо flag = 1, виводимо знайдений дільник і завершуємо виконання циклу.

flag = 0;
for (i = 2; i <= sqrt(n); i++)
  if (n % i == 0)
  {
    printf("%d\n", i);
    flag = 1;
    break;
  }

Якщо дільник не був знайдений, то число є простим. У цьому випадку виводимо саме число .

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 = int(input())

Перебираємо можливі дільники числа в діапазоні від до \sqrt{n} включно. При знаходженні першого (найменшого) дільника виводимо його і завершуємо виконання циклу.

for i in range(2, math.isqrt(n)+1):
  if n % i == 0:
    print(i)
    break

Якщо цикл завершується природним чином (без використання break), то виконується блок else).

Якщо дільник не був знайдений, то число є простим. Виводимо саме число .

else: # сюди потрапимо коли цикл закінчиться сам
  print(n)