1+2+3+...+100=? 用 Python 解决等差数列求和问题
在数学的奇妙世界里,有个经典问题一直吸引着大家,那就是 “1 + 2 + 3 + …… + 100 等于多少呢?” 德国大数学家高斯小时候,就碰到了这道难题。他特别聪明,发现 1 和 100 加起来是 101,2 和 99 加起来也是 101,这样一对一对的,一共有 50 对,所以很快算出答案是 5050。现在,我们用 Python 编程,也能想出办法解决这个问题。
最直观的连加解法
问题描述
就说 “1 + 2 + 3 + …… + 100”,这其实是个有规律的数列相加。开头的数是 1,相邻两个数之间的差都是 1,一共有 100 个数要加起来。最容易想到的办法,就是从 1 开始,一个一个接着加,一直加到 100。
解决思路
我们用循环的办法,让一个数从 1 开始,每次增加 1,把这个数加到另一个用来存结果的变量里。这样循环 100 次,最后这个变量里存的就是这 100 个数加起来的和。
Python 代码实现
sum_value = 0
for i in range(1, 101):
sum_value += i
print(f"1到100的等差数列和为: {sum_value}")
在这段代码里,我们先把一个叫sum_value的变量设为 0,它是用来存最后结果的。然后用for循环,让i这个数从 1 慢慢变到 100。每次循环,都把i加到sum_value里。等循环结束,用print把最后算出来的和显示出来。
更高效的公式解法
引出思考
上面一个一个数相加的办法,虽然能算出答案,但要是数特别多,比如要算 1 到 1000000 的和,就得加 1000000 次,太费时间了。那有没有更快的办法呢?这就要看看这个有规律数列的特点了。
公式原理
其实,数学家发现了一个能快速算出这种有规律数列和的公式。这个公式是。这里的就是最后加起来的总数,是数列开头的那个数,是数列最后一个数,n是一共有多少个数。
比如说 “1 + 2 + 3 + …… + 100” 这个数列,开头的数是 1,一共有 100 个数,那n就是 100。最后一个数就是 100(因为是从 1 数到 100)。把这些数放进公式里,就是,算出来就是 5050。
还有个更通用的公式,。这里的 d 是相邻两个数的差。在 “1 + 2 + 3 + …… + 100” 里,相邻两个数差 1,也就是d = 1。用这个公式算,结果也是一样的。
Python 代码实现
a1 = 1 # 首项
d = 1 # 公差
n = 100 # 项数
sum_value = (n * (2 * a1 + (n - 1) * d)) / 2
print(f"1到100的等差数列和为: {sum_value}")
在这段代码里,我们先把开头的数、相邻数的差 d 和一共有多少个数 n 都写好。然后按照公式算出总数sum_value,最后用print把结果显示出来。
效率对比
一个一个数相加的办法,要加很多次,次数和数的个数一样多,所以它的时间复杂度是。用公式算呢,只要做几次乘法、加法和除法就行,不管有多少个数,做的运算次数都差不多,时间复杂度是。要是数特别多,像有 1000000 个数,一个一个加要很久,用公式一下子就能算出答案,快多了。
学了这两种办法,我们就知道怎么用 Python 算 “1 + 2 + 3 + …… + 100” 这样有规律数列的和了。以后碰到不同的问题,根据数的多少,就能选一个又快又好的办法。在编程的时候,把数学知识和编程技巧结合起来,就能让写出来的代码又简单又好用,帮我们解决各种复杂的问题。