Дано натуральное число 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. Но нас «прощает» то, что по условию задачи нам надо выводить делители в порядке возрастания. Подмеченное нами свойство мы затем используем в дальнейших задачах.
|