<分区>
我需要从作为列表传递给函数的整数中找到 x1 ^ (x2 ^ (x3 ^ (... ^ xn)))
的个位数。
例如输入 [3, 4, 2]
会返回 1
因为 3 ^ (4 ^ 2) = 3 ^ 16 = 43046721
最后一位是 1。
该函数需要尽可能高效,因为显然尝试计算 767456 ^ 981242
不是很快。
我尝试了几种方法,但我认为解决这个问题的最佳方法是使用序列。例如,任何以 1
结尾的数字,在求幂时,总是以 1
结尾。对于 2
,结果数字将以 2、4、6 或 8
结尾。
如果一个数的幂,结果数的最后一位将遵循基于指数最后一位的模式:
1:序列为1
2:序列为2、4、8、6
3:序列为3、9、7、1
4:序列为4、6
5:序列为5
6:序列为6
7:顺序为7、9、3、1
8:序列为8、4、2、6
9:序列为9、1
0:序列为0
我认为计算整体最后一位数字的最简单方法是通过列表向后计算并一次计算每个计算的最后一位数字,直到我回到开始但我不确定如何做到这一点? 如果有人可以提供帮助或建议另一种与该方法同等或更有效的方法,我们将不胜感激。
到目前为止我有这段代码,但它不适用于非常大的数字
def last_digit(lst):
if lst == []:
return 1
total = lst[len(lst)-2] ** lst[len(lst)-1]
for n in reversed(range(len(lst)-2)):
total = pow(lst[n], total)
return total%10
编辑:0 ^ 0
应假定为 1