求和算法怎么解
求1+(1+2)+(1+2+3)+...+(1+2+3+...+n)之和有3种解法。解法1:依次求出(1+2+...+i)(1≤i≤n)之后累加;
解法2:利用i(i+1)/2(1≤i≤n)求和后再累加;
解法3:利用n(n+1)(n+2)/6公式求和。
#假设N=100
#解法1:
s=0
for i in range(1,101):
t=0
for j in range(1,i+1):
t+=j
s+=t
print(s)
#解法2:
s=0
for i in range(1,101):
s+=i*(i+1)//2
print(s)
#解法3:
print(100*(100+1)*(100+2)//6) D:\wpp>D:/Python37/python.exe d:/wpp/test8.py
171700
171700
171700 本帖最后由 傻眼貓咪 于 2023-3-6 19:01 编辑
四面体数
def func1(n):
if not n:
return 0
SUM = 0
for i in range(1, n + 1):
SUM += i
return SUM + func1(n - 1)
def func2(n):
foo = lambda i: i * (i + 1) >> 1
SUM = 0
for i in range(1, n + 1):
SUM += foo(i)
return SUM
def func3(n):
return n * (n + 1) * (n + 2) // 6
n = 100
print(func1(n))
print(func2(n))
print(func3(n)) 傻眼貓咪 发表于 2023-3-6 18:50
四面体数
太夸张了吧
我都怀疑楼主能否看得懂 wp231957 发表于 2023-3-6 19:19
太夸张了吧
我都怀疑楼主能否看得懂
{:10_282:} 法1:
首先求出第一个括号内的和为1,第二个括号内的和为(1+2),第三个括号内的和为(1+2+3),以此类推,第n个括号内的和为(1+2+3+...+n)。因此,可以从1到n循环,每次计算每个括号内的和,并将其累加得到最终结果。
n = 10
result = 0
for i in range(1, n + 1):
inner_sum = sum(range(1, i + 1))
result += inner_sum
print(result)
解法2:
根据等差数列求和公式,1+2+3+...+i=i(i+1)/2。因此,可以直接利用该公式计算每个括号内的和,然后将它们累加起来得到最终结果。
n = 10
result = 0
for i in range(1, n + 1):
inner_sum = i*(i+1)//2
result += inner_sum
print(result)
解法3:
通过观察,可以发现括号中的和是一系列连续的整数相加所得,而这些整数的个数也正好是括号的编号。因此,可以利用公式n(n+1)(n+2)/6直接计算所有括号内的和之和。
n = 10
result = n*(n+1)*(n+2)//6
print(result)
以上三种解法都可以得到结果
有用请设置最佳答案 解法1:
当i=1时,1的和为1;
当i=2时,(1+2)的和为3;
当i=3时,(1+2+3)的和为6;
...
当i=n时,(1+2+3+...+n)的和为1+2+3+...+n-1+n,也就是前n-1个自然数的和再加上n,即n(n+1)/2。
因此,要求1+(1+2)+(1+2+3)+...+(1+2+3+...+n)之和,可以按照上面的规律分别计算出每一项的和,然后累加起来,即:
1 + (1+2) + (1+2+3) + ... + (1+2+3+...+n)
= 1 + 3 + 6 + ... + n(n+1)/2
= (1+0) + (1+2) + (1+2+3) + ... + (1+2+3+...+n)
= (1+1+...+1) + (0+1+2+...+(n-1)) + (0+1+2+...+(n-2))+...+ (0+1+2) + 0
= n + (0+1+2+...+(n-1)) + (0+1+2+...+(n-2))+...+ (0+1+2)
= n + (n-1)n/2 + (n-2)(n-1)/2 + ... + 2.1/2 + 1.0/2
= n + n(n-1)/2 + (n-1)(n-2)/2 + ... + 2.1/2 + 1.0/2
= n + n(n-1)/2 + (n-1)(n-2)/2 + ... + 2.1/2 + n(n-1)(n-2)/6
= n(n+1)/2 + n(n-1)(n+1)/6
= n(n+1)(n+2)/6
因此,1+(1+2)+(1+2+3)+...+(1+2+3+...+n)之和等于n(n+1)(n+2)/6。
解法2:
我们可以将题目中的求和式改写为:
1 + (1+2) + (1+2+3) + ... + (1+2+3+...+n)
= (1+0) + (1+2) + (1+2+3) + ... + (1+2+3+...+n)
= 1*1 + 2*3/2 + 3*4/2 + ... + n*(n+1)/2
根据等差数列求和公式,可以将上面的式子改写为:
1 + (1+2) + (1+2+3) + ... + (1+2+3+...+n)
= 1*1 + 2*3/2 + 3*4/2 + ... + n*(n+1)/2
= (1+2+3+...+n)*(n+1)/2
= n(n+1)(n+2)/6
因此,1+(1+2)+(1+2+3)+...+(1+2+3+...+n)之和等于n*(n+1)*(n+2)/6。
页:
[1]