N极大时前N个自然数之和
给定一个正整数n ,任务是在n非常大(1 ≤ n ≤ 10 20000 )的情况下找到前n 个自然数的和。
例子:
Input: n = 4
Output: 10
1 + 2 + 3 + 4 = 10
Input: n = 12345678910
Output: 76207893880582233505
方法:前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