На натуральном отрезке найдите и выведите число 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.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д