📜  N极大时前N个自然数之和

📅  最后修改于: 2022-05-13 01:58:09.604000             🧑  作者: Mango

N极大时前N个自然数之和

给定一个正整数n ,任务是在n非常大(1 ≤ n ≤ 10 20000 )的情况下找到前n 个自然数的和。

例子:

方法:n 个自然数之和为(n * (n + 1)) / 2 ,但考虑到n可能非常大(1 ≤ n ≤ 10 20000 )。现在很明显,我们只能将总和存储在字符串中。一个简单的解决方案是运行一个循环直到n并通过两个字符串相加的方法计算总和,然后将所有数字一个一个迭代地相加,但是这个解决方案的时间复杂度会非常大。
我们可以使用Java中的 BigInteger 类来优化这个解决方案。 BigInteger 类为数学运算提供了预定义的方法,可用于求解(n * (n + 1)) / 2以计算所需的结果。

  • 取一个字符串来保存极大输入的值。
  • 将此字符串转换为 BigInteger。
  • 使用 BigInteger 类的预定义方法计算(n * (n + 1)) / 2
  • 最后打印计算的总和

下面是上述方法的实现:

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


输出:
76207893880582233505