На натуральном отрезке найдите и выведите число 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.

Объяснение кода листинга программы

  1. Переменные a, b, i, j, s, max, imax объявлены как longint.
  2. Цикл repeat-until используется для ввода значения переменной a. Пользователю предлагается ввести натуральное число, и цикл продолжается до тех пор, пока это число больше нуля.
  3. Цикл repeat-until используется для ввода значения переменной b. Пользователю предлагается ввести натуральное число, большее значения переменной a.
  4. Переменная max инициализируется значением 0.
  5. Цикл for выполняется для каждого числа от a до b.
  6. Внутри цикла для каждого числа i создается переменная s, которая инициализируется значением 0.
  7. Цикл for выполняется для каждого числа от 2 до i div 2 (т.е. до половины числа i).
  8. Внутри цикла проверяется, делится ли i на текущее значение j без остатка. Если да, то значение j добавляется к s.
  9. Если значение s больше текущего значения max, то обновляются значения max и imax.
  10. После завершения цикла для каждого числа выводится сообщение, содержащее наибольшую сумму делителей и число, которое ее имеет.
  11. Программа завершается после нажатия клавиши Enter.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 4.143 из 5
Похожие ответы