python |
您所在的位置:网站首页 › 用python求前n项和 › python |
以计算等比数列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()自身的限制,第二个参数只能为0或者2-36之间的整数,不适用于比值q为小数或者大于36的情况。 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |