Якщо — дільник числа , то також є дільником числа . При цьому якщо — повний квадрат, то дільники \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)