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
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