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