Найти число от 1 до n с максимальной суммой делителей - PascalABC.NET

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

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

Должно работать для n<=1 000 000 Вот мой код и я не знаю где ошибка...

Решение задачи: «Найти число от 1 до n с максимальной суммой делителей»

textual
Листинг программы
Program b;
var n,i,j,k,max,maxn:Integer;
begin
readln(n);
max:=1;
maxn:=1;
for i:=2 To n Do
 begin
  k:=2;//1 и само 
  for j:=2 to trunc(sqrt(i)) do//считаем делители до корня из числа и умножаем на 2
  if i mod j=0 then inc(k,2);
  if frac(sqrt(i))=0 then dec(k);//если число полный квадрат, то минус 1
  if k>max then
   begin
    max:=k;
    maxn:=i;
   end;
  end;
write(maxn);
end.

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

  1. Объявлены переменные: n, i, j, k, max, maxn (10).
  2. С помощью функции readln(n) вводится число n (11).
  3. Переменная max инициализируется значением 1 (12).
  4. Переменная maxn инициализируется значением 1 (13).
  5. Два вложенных цикла for начинаются. Первый цикл проходит по числам от 2 до n (14).
  6. Внутри первого цикла начинается второй цикл for который считает делители числа i до его корня (15).
  7. Если число i делится на j без остатка, то к переменной k прибавляется 2 (16).
  8. Если число i является полным квадратом (то есть его корень извлекается без остатка), то переменная k уменьшается на 1 (17).
  9. Если переменная k больше max, то максимальное значение присваивается переменной max, а переменная maxn получает значение i (18).
  10. По завершению вложенных циклов, число maxn выводится на экран (19).
  11. Конец программы (20).

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


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

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

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