На натуральном отрезке найдите и выведите число N с наибольшей суммой своих делителей - Free Pascal
Формулировка задачи:
На натуральном отрезке [a,b] найдите и выведите число N с наибольшей суммой своих делителей. Само число и единицу в качестве делителей не учитывать. Нужно расписать решение задачи и алгоритм, и убрав массив t1 из кода. И как сразу определить является ли сумма максимальной?
Код
Листинг программы
- var a,b,i,j,max,poz,ch : longint;
- t1,t2 : array [1..1000] of longint;
- begin
- write('a=');readln(a); //Читаем
- write('b=');readln(b); //границы
- if a>=b then halt;
- j:=0;
- for ch:=a to b do //Проверяем числа с промежутка
- begin
- inc(j);t2[j]:=ch;
- for i:=2 to ch-1 do
- if ch mod i=0 then t1[j]:=t1[j]+i; //Для каждого числа создаем
- end; //элемент в массиве t1
- max:=t1[1];poz:=1; //содержащий сумму делителей
- for i:=1 to j do
- if t1[i]>max then begin max:=t1[i];poz:=i; ////Находим максимум в массиве t1.
- end;
- writeln('N=',t2[poz]);
- write('Наибольшая сумма делителей: ',t1[poz]);
- readln;
- end.
Решение задачи: «На натуральном отрезке найдите и выведите число N с наибольшей суммой своих делителей»
textual
Листинг программы
- var a,b,i,j,s,max,imax: longint;
- begin
- repeat
- write('Введите натуральное число a=');
- readln(a);
- until a>0;
- repeat
- write('Введите натуральное число,больше ',a,' b=');
- readln(b);
- until b>a;
- max:=0;
- for i:=a to b do
- begin
- s:=0;
- for j:=2 to i div 2 do
- if i mod j=0 then s:=s+j;
- if s>max then
- begin
- max:=s;
- imax:=i
- end;
- end;
- write('Наибольшую сумму делителей=',max,' имеет число ',imax);
- readln;
- end.
Объяснение кода листинга программы
- Переменные
a
,b
,i
,j
,s
,max
,imax
объявлены как longint. - Цикл repeat-until используется для ввода значения переменной
a
. Пользователю предлагается ввести натуральное число, и цикл продолжается до тех пор, пока это число больше нуля. - Цикл repeat-until используется для ввода значения переменной
b
. Пользователю предлагается ввести натуральное число, большее значения переменнойa
. - Переменная
max
инициализируется значением 0. - Цикл for выполняется для каждого числа от
a
доb
. - Внутри цикла для каждого числа
i
создается переменнаяs
, которая инициализируется значением 0. - Цикл for выполняется для каждого числа от 2 до
i
div 2 (т.е. до половины числаi
). - Внутри цикла проверяется, делится ли
i
на текущее значениеj
без остатка. Если да, то значениеj
добавляется кs
. - Если значение
s
больше текущего значенияmax
, то обновляются значенияmax
иimax
. - После завершения цикла для каждого числа выводится сообщение, содержащее наибольшую сумму делителей и число, которое ее имеет.
- Программа завершается после нажатия клавиши Enter.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д