Somma dei numeri in un intervallo#2860

Somma dei numeri in un intervallo (Editoriale)

Se si calcola la somma tramite un ciclo, nel caso peggiore (per a = -2 \cdot 10^9 e b = 2 \cdot 10^9) sarà necessario eseguire fino a 4 \cdot 10^9 iterazioni, il che comporterà il superamento del limite di tempo. Pertanto, utilizziamo la formula della somma di una progressione aritmetica. Il primo termine è uguale ad , l'ultimo a , e il numero di termini è uguale a b - a + 1. Allora la somma cercata si calcola secondo la formula:

\frac{a+b}{2} (b - a + 1)

Va inoltre osservato che il valore ottenuto potrebbe non entrare nel tipo int, pertanto nei calcoli è necessario utilizzare il tipo long long.

Implementazione dell'algoritmo

Leggiamo i dati in ingresso.

scanf("%lld %lld",&a,&b);

Calcoliamo e stampiamo la risposta.

res = (a + b) * (b - a + 1) / 2;
printf("%lld\n",res);

Implementazione in Java

import java.util.*;

public class Main
{
  public static void main(String[] args)
  {
    Scanner con = new Scanner(System.in);
    long a = con.nextLong();
    long b = con.nextLong();
    long res = (a + b) * (b - a + 1) / 2;
    System.out.println(res);
  }
}

Implementazione in Python

Leggiamo i dati in ingresso.

a, b = map(int,input().split())

Calcoliamo e stampiamo la risposta.

res = (a + b) * (b - a + 1) // 2
print(res)