Cita:
Empezado por roman
Rizando el rizo
escafandra, creo que tu fórmula:
puede aún ser más sencilla. Debido a los dos condicionales, n y m siempre son impares y por tanto (n + m) y (n - m) siempre son pares. Entonces (m - n) mod 2 siempre es cero y se reduce a ((m - n) div 2) * ((n + m) div 2) y como los términos son pares el div coincide con la división normal, así que podemos ponerlo como
(m - n)*(m + n)/4 = (m - n)*(m + n) div 4
o sea:
Código Delphi [-]
function SumaPares(n, m: Integer): Integer;
begin
if(n mod 2 = 0) then dec(n);
if(m mod 2 = 0) then inc(m);
Result := (m - n)*(m + n) div 4;
end;
LineComment Saludos
|
Efectivamente
roman sale una fórmula bastante redonda y sabiendo que suma por diferencia es diferencia de cuadrados, no lo aplicaremos para no desbordar rápidamente los enteros (en caso de límites más amplios). Ya puestos y con ese fin, usamos la API de Windows
Código Delphi
[-]
function SumaPares(n, m: Integer): Integer;
begin
if(n mod 2 = 0) then dec(n);
if(m mod 2 = 0) then inc(m);
Result:= MulDiv(m-n, n+m, 4);
end;
Saludos.