Усі дільники#8669

Усі дільники (Розбір)

Якщо — дільник числа , то також є дільником числа . При цьому якщо — повний квадрат, то дільники \sqrt{n} і n /\sqrt{n} співпадають.

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

Читаємо вхідне значення .

scanf("%d",&n);

Перебираємо дільники від до \sqrt{n} не включно.

for(i = 1; i < sqrt(n); i++)
  if (n % i == 0)
  {

Якщо — дільник числа , то також буде дільником числа .

    v.push_back(i);
    v.push_back(n / i);
  }

Перевіряємо, чи є повним квадратом. У цьому випадку додаємо в вектор дільник \sqrt{n}.

i = sqrt(n);
if (i * i == n) v.push_back(i);

Сортуємо дільники у зростаючому порядку.

sort(v.begin(),v.end());

Виводимо в одному рядку всі дільники.

for(i = 0; i < v.size(); i++)
  printf("%d ",v[i]);
printf("\n");

Java реалізація

import java.util.*;

public class Main
{
  public static void main(String[] args)
  {
    Scanner con = new Scanner(System.in);
    int n = con.nextInt();
    ArrayList<Integer> v = new ArrayList<Integer>(); 
    for(int i = 1; i < Math.sqrt(n); i++)
      if (n % i == 0)
      {
        v.add(i);
        v.add(n / i);
      }

    int i = (int)Math.sqrt(n);
    if (n % i == 0) v.add(i);

    Collections.sort(v);

    for(i = 0; i < v.size(); i++)
      System.out.print(v.get(i) + " ");
    System.out.println();
    con.close();
  }
}

Python реалізація

import math

Читаємо вхідне значення .

n = int(input())

До списку будемо додавати дільники числа .

lst = []

Перебираємо дільники від до \sqrt{n} не включно.

for i in range(1,int(math.sqrt(n))):

Якщо — дільник числа , то також буде дільником числа .

  if n % i == 0:
    lst.append(i)
    lst.append(n//i)

Перевіряємо, чи є повним квадратом. У цьому випадку додаємо в вектор дільник \sqrt{n}.

i = int(math.sqrt(n));
if n % i == 0: lst.append(i);

Сортуємо дільники у зростаючому порядку.

lst.sort()

Виводимо в одному рядку всі дільники.

print(*lst)