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