iİnformatikanın məktəbdə tədrisi

2-13r

    Дано натуральное число n. Найти и вывести на экран монитора все его делители в порядке возрастания.

Вообще, это простая задача: надо перебрать числа 2, 3 … и проверить, делится ли число n на эти числа (1 и само n является всегда делителем) . А вот до каких пор перебирать эти числа? Почему то этот вопрос вызывает у большинства затруднение. Тут необходимо догадаться, что самый маленький делитель числа n – это 2. Тогда самый максимальный делитель n div 2  и нет никакой необходимости проверять числа после n div 2 . Чтобы не выводить отдельно делитель 1, мы проверку в программе начнем с 1 и до n div 2  (строка 6). Число   n выведем отдельно (строка 8)

1

2

3

4

5

6

7

8

9

10

11

12

Program A2_13;

Var

  n,i:integer;

 begin

   readln(n);

   for i:=1 to n div 2  do

     if (n mod i = 0) then write(i,' ');

   writeln(n);

   readln;

 end.

// Program A2.12;

#include <iostream>

 

using namespace std;

 

int main()

{  int n,i;

     cin>>n;

    for(i=1; i<=n/2; i++)

  if(n%i==0) cout<<i<<" ";

    cout << n << endl;

    return 0;

}



Примечание. В программе наверху мы, вообще говоря, делаем двойную работу. Например, пусть исходным числом будет 96. Число 2 является его делителем, а значит и 96 div 2 =48 также будет делителем, число 3 – делитель, а значит и  96 div 3 = 32 также будет делителем, а в программе мы после нахождения 2 и 3 продолжаем поиск и затем находим и 32 и 48. Но нас «прощает» то, что по условию задачи нам надо выводить делители в порядке возрастания. Подмеченное нами свойство мы затем используем в дальнейших задачах.