一道非常简单的练习题:
给定
n
,计算:1^8 + 2^8 +3^8 +4^8 + ... + n^8
,结果取模2020
第一时间想到的就是math.pow()
, 上来就是:
def cal01(x, y, z):
return sum(map(lambda i: math.pow(i + 1, y) % z, range(x)))
对于x = 1234, y = 8, z = 2020
有输出:
1231673.0
一看测试用例,结果对不上,蒙了
后面尝试用内建的pow:
def cal02(x, y, z):
return sum(map(lambda i: pow(i + 1, y) % z, range(x)))
对于x = 1234, y = 8, z = 2020
有输出:
1147613
这次没毛病,后来发现math.pow()
函数会把参数转换为 float
,而内建的pow()
把参数直接作为整型,
对于输入x = 12, y = 8, z = 2020
,上面两个函数的输出分别是:
9690.0
9690
也就是数值小的时候还行,后面x
太大了就会导致累计偏差很大
此外内建的pow()
可以有三个参数:pow(x, y[, z])
,z表示对结果进行取模
所以代码改为:
def cal(x, y, z):
return sum(map(lambda i: pow(i + 1, y, z), range(x)))
基础不牢地动山摇.png