python

您所在的位置:网站首页 用python求前n项和 python

python

#python | 来源: 网络整理| 查看: 265

    以计算等比数列1+2+4+8+…+an为例,求前7项和。

先看常规解法: a1 = 1 #首项 q = 2 #公比 s = 0 #前n项和 n = 7 #n项 for i in range(n): s += a1*2**i

s = sum(a1 * 2**i for i in range(n)) int()函数:

int( x [, d] ) 返回实数x的整数部分,或把字符串x看作d进制数并转化为十进制,d默认为10进制。

int()解法: a1 = 1 q = 2 s = 0 n = 7 #'1'*n :返回n个对应字符串组成的新字符串,如:'1'*7 返回字符串'1111111' s = a1 * int('1'* n, q) # s = 1*int('1'*n, 2) 解析:

将等比数列前n项的和看作是 a1 乘以一个 q 进制数, 即: a1+a2+a3+a4+…an = a1*( q0+q1+q2+q3+…+qn)

当 a1 = 1, q = 2, n = 7 时, 原式 = 1 + 2 + 4 + 8 +…+ an         = 1*( 20 + 21 + 22 + 23 +…+ 27)         = 1* 20 + 1* 21+ 1* 22 + 1* 23 +…+ 1* 27 (等同于二进制数1111111(2) 转十进制的计算)         = 1111111(2)         = 127(10)

int()效率问题

比较运行时间:

import time if __name__ == '__main__': start = time.perf_counter() # 起始时间 ''' for i in range(n): #1 s += a1*2**i ''' ''' s = sum(a1 * 2**i for i in range(n)) #2 ''' s = a1 * int('1'* n, q) #3 end = time.perf_counter() # 结束时间 print('运行时间:%.10fs' % (end - start)) # 输出运行时间

在这里插入图片描述 int()方法避开了循环,而执行进制的转换速度较快。并经过多次验证,int()方法比第一种方法速度提高了近3倍,比第二种提高近2倍。

比较遗憾的是,由于函数int()自身的限制,第二个参数只能为0或者2-36之间的整数,不适用于比值q为小数或者大于36的情况。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3