Suma de los primeros N números naturales cuando N es extremadamente grande

Dado un entero positivo n , la tarea es encontrar la suma de los primeros n números naturales dado que n es muy grande (1 ≤ n ≤ 10 20000 ). Ejemplos:

Entrada: n = 4 Salida: 10 1 + 2 + 3 + 4 = 10 Entrada: n = 12345678910 Salida: 76207893880582233505

Enfoque: La suma de los primeros n números naturales es (n * (n + 1)) / 2 pero dado que n puede ser extremadamente grande (1 ≤ n ≤ 10 20000 ). Ahora es obvio que solo podemos almacenar la suma en una string. Una solución simple es ejecutar un bucle hasta n y calcular la suma mediante el método de suma de dos strings y sumar iterativamente todos los números uno por uno, pero la complejidad temporal de esta solución será muy grande. Podemos optimizar esta solución usando la clase BigInteger en Java. La clase BigInteger brinda métodos predefinidos para operaciones matemáticas que se pueden usar para resolver (n * (n + 1)) / 2 para calcular el resultado requerido.

  • Tome una string para contener el valor de una entrada extremadamente grande.
  • Transforme esta string en un BigInteger.
  • Calcule (n * (n + 1)) / 2 utilizando los métodos predefinidos de la clase BigInteger.
  • Imprime la suma calculada al final.

A continuación se muestra la implementación del enfoque anterior: 

Java

// Java program to find the sum of the first n
//  natural numbers  when n is very large
import java.math.BigInteger;
class GeeksForGeeks {
 
    // Function to return the sum of first
    // n natural numbers
    static BigInteger sum(String n)
    {
        // b1 = 1
        BigInteger b1 = BigInteger.ONE;
 
        // b2 = 2
        BigInteger b2 = new BigInteger("2");
 
        // Converting n to BigInteger
        BigInteger bigInt = new BigInteger(n);
 
        // Calculating (n * (n + 1)) / 2
        BigInteger result =
         (bigInt.multiply(bigInt.add(b1))).divide(b2);
        return result;
    }
 
    // Driver code
    public static void main(String[] args)
                   throws java.lang.Exception
    {
        String n = "12345678910";
        System.out.println(sum(n));
    }
}

Python3

# Python3 program to find the sum
# of first n natural numbers when
# n is very large
 
# Function to return the sum of
# first n natural numbers
def Sum(n):
     
    result = (n * (n + 1)) // 2
     
    return result
 
# Driver Code   
if __name__ == "__main__":
 
    n = "12345678910"
    print(Sum(int(n)))
 
# This code is contributed
# by Rituraj_Jain

PHP

<?php
// PHP program to find the sum
// of first n natural numbers when
// n is very large
 
// Function to return the sum of
// first n natural numbers
function Sum($n)
{
    $result = ($n * (int)(($n + 1)) / 2);
     
    return $result;
}
 
// Driver Code
$n = "12345678910";
 
echo Sum($n);
 
// This code is contributed
// by Akanksha Rai
?>

Javascript

// Javascript program to find the sum of the first n
//  natural numbers  when n is very large
 
// Function to return the sum of first n natural numbers
function Sum(n)
{
    let result = (Number(n)*(Number(n)+1))/2;
    return result;
}
 
// Driver code
let n = "12345678910";
console.log(Sum(n));
 
// This code is contributed by Ishan Khandelwal
Producción:

76207893880582233505

Publicación traducida automáticamente

Artículo escrito por Shahnawaz_Ali y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *