На натуральном отрезке найдите и выведите число N с наибольшей суммой своих делителей - Free Pascal

Узнай цену своей работы

Формулировка задачи:

На натуральном отрезке [a,b] найдите и выведите число N с наибольшей суммой своих делителей. Само число и единицу в качестве делителей не учитывать. Нужно расписать решение задачи и алгоритм, и убрав массив t1 из кода. И как сразу определить является ли сумма максимальной? Код
Листинг программы
  1. var a,b,i,j,max,poz,ch : longint;
  2. t1,t2 : array [1..1000] of longint;
  3. begin
  4. write('a=');readln(a); //Читаем
  5. write('b=');readln(b); //границы
  6. if a>=b then halt;
  7. j:=0;
  8. for ch:=a to b do //Проверяем числа с промежутка
  9. begin
  10. inc(j);t2[j]:=ch;
  11. for i:=2 to ch-1 do
  12. if ch mod i=0 then t1[j]:=t1[j]+i; //Для каждого числа создаем
  13. end; //элемент в массиве t1
  14. max:=t1[1];poz:=1; //содержащий сумму делителей
  15. for i:=1 to j do
  16. if t1[i]>max then begin max:=t1[i];poz:=i; ////Находим максимум в массиве t1.
  17. end;
  18. writeln('N=',t2[poz]);
  19. write('Наибольшая сумма делителей: ',t1[poz]);
  20. readln;
  21. end.

Решение задачи: «На натуральном отрезке найдите и выведите число N с наибольшей суммой своих делителей»

textual
Листинг программы
  1. var a,b,i,j,s,max,imax: longint;
  2. begin
  3. repeat
  4.  write('Введите натуральное число a=');
  5.  readln(a);
  6. until a>0;
  7. repeat
  8.  write('Введите натуральное число,больше ',a,' b=');
  9.  readln(b);
  10. until b>a;
  11. max:=0;
  12. for i:=a to b do
  13.  begin
  14.   s:=0;
  15.   for j:=2 to i div 2 do
  16.   if i mod j=0 then s:=s+j;
  17.   if s>max then
  18.    begin
  19.     max:=s;
  20.     imax:=i
  21.    end;
  22.  end;
  23. write('Наибольшую сумму делителей=',max,' имеет число ',imax);
  24. readln;
  25. 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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы