Chihirotlmt 发表于 2023-3-6 13:57:23

求和算法怎么解

求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公式求和。

wp231957 发表于 2023-3-6 14:30:13

#假设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)

wp231957 发表于 2023-3-6 14:30:30

D:\wpp>D:/Python37/python.exe d:/wpp/test8.py
171700
171700
171700

傻眼貓咪 发表于 2023-3-6 18:50:27

本帖最后由 傻眼貓咪 于 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))

wp231957 发表于 2023-3-6 19:19:18

傻眼貓咪 发表于 2023-3-6 18:50
四面体数

太夸张了吧
我都怀疑楼主能否看得懂

傻眼貓咪 发表于 2023-3-6 19:46:20

wp231957 发表于 2023-3-6 19:19
太夸张了吧
我都怀疑楼主能否看得懂

{:10_282:}

sfqxx 发表于 2023-4-9 16:31:26

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


以上三种解法都可以得到结果
有用请设置最佳答案

陶远航 发表于 2023-4-9 17:42:17

解法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]
查看完整版本: 求和算法怎么解