python --- int( )函数计算等比数列前n项和

    以计算等比数列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):		#1s += a1*2**i''''''s = sum(a1 * 2**i for i in range(n))		#2'''s = a1 * int('1'* n, q) 	#3end = time.perf_counter()  # 结束时间print('运行时间:%.10fs' % (end - start))  # 输出运行时间

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

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


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部