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):		#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))  # 输出运行时间

python --- int( )函数计算等比数列前n项和_第1张图片
int()方法避开了循环,而执行进制的转换速度较快。并经过多次验证,int()方法比第一种方法速度提高了近3倍,比第二种提高近2倍。

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

你可能感兴趣的:(python --- int( )函数计算等比数列前n项和)