Bütün bölənlər#8669

Bütün bölənlər (Həll təhlili)

Əgər — ədədinin bölənidirsə, onda də ədədinin bölənidir. Belə ki, əgər tam kvadraddırsa, o zaman bölənlər \sqrt{n} və n/\sqrt{n} üst-üstə düşürlər.

Alqoritmin reallaşdırılması

Giriş dəyəri -i oxuyuruq.

scanf("%d",&n);

Bölənləri -dən \sqrt{n}-ə qədər istisna olmaqla yoxlayırıq.

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

Əgər — ədədinin bölənidirsə, onda də həmin ədədin böləni olacaq.

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

tam kvadrat olub-olmadığını yoxlayırıq. Bu halda \sqrt{n} bölənini vektorun içinə əlavə edirik.

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

Bölənləri artan sıralama ilə düzürük.

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

Bütün bölənləri bir sətirdə çıxarırıq.

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

Java reallaşdırılması

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 reallaşdırılması

import math

Giriş dəyəri -i oxuyuruq.

n = int(input())

ədədinin bölənlərini siyahısına əlavə edəcəyik.

lst = []

Bölənləri -dən \sqrt{n}-ə qədər istisna olmaqla yoxlayırıq.

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

Əgər — ədədinin bölənidirsə, onda də həmin ədədin böləni olacaq.

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

tam kvadrat olub-olmadığını yoxlayırıq. Bu halda \sqrt{n} bölənini vektorun içinə əlavə edirik.

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

Bölənləri artan sıralama ilə düzürük.

lst.sort()

Bütün bölənləri bir sətirdə çıxarırıq.

print(*lst)