Найдите ошибку. ( выводит просто большее число ) Найти натуральное число из интервала от a до b с максимальной суммой делителей. var max,i,j,k,a,...

Найдите ошибку. ( выводит просто большее число ) Найти натуральное число из интервала от a до b с максимальной суммой делителей. var max,i,j,k,a,...Найдите ошибку. ( выводит просто большее число ) Найти натуральное число из интервала от a до b с максимальной суммой делителей. var max,i,j,k,a,b,z:integer; begin k:=0; max:=0; readln(a,b); for i:=a to b do begin for j:=1 to i do if (i mod j)=0 then k:=k+1; if k>max then begin max:=k; z:=i; end; end; writeln (z); end.
Гость
Ответ(ы) на вопрос:
Гость
Ошибки две: 1) Не забывайте обнулять переменную k. У вас она не обнулялась, и так как каждый раз прибавлялось что-то, то максимум достигался на последнем числе. 2) Нужно не количество, а сумма делителей, поэтому к k надо прибавлять не 1, а i. Пример исправленной программы: var   max, i, j, k, a, b, z: integer;   begin   max := 0;   readln(a, b);   for i := a to b do   begin     k := 0;     for j := 1 to i do       if (i mod j) = 0 then          k := k + j;     if k > max then      begin       max := k;       z := i;     end;   end;   writeln(z); end.
Не нашли ответ?
Ответить на вопрос
Похожие вопросы