我是一个蟒蛇新手。我希望以尽可能最有效的方式计算result = np.zeros(4000,64*9)
ind = 0
for i in range(64):
for j in range(9):
result[:,ind]= tf.muliply(F[:,i]),M[:,j])
ind += 1
(即简化功率部分)。我找到了一种方法:(a ** b) % 10
。我的问题是,有更有效的方法吗?此问题是CodeFights任务的扩展。原始问题已被接受((a % 10) ** b) % 10
。
答案 0 :(得分:1)
由于数字 mod 10 形成ring,您可以在每个中间值计算残差 mod 10 ,而不会影响结果。< / p>
有一个名为Square-and-multiply的O(log b)
步骤算法可以大大加快您的计算速度。
基本思想是,即使b
,我们也可以对论证进行平方
并且在不改变结果的情况下将指数除以2。
对于奇数b
,我们提取a
(或我们当前的参数)的一个幂,并在偶数情况下进行(平方和减半)。
所以把它放在一起,如果你实现了Square-and-multiply算法并在每一步之后计算残差 mod 10 ,那么你将有一种很好而有效的方法来计算你的最后一位数。 / p>
答案 1 :(得分:1)
if n % 4 == 0:
x = 4
else:
x = n % 4
last_digit = (m ** x) % 10
简短说明: 如果列出电源的初始扩展,您将找到一种模式。 因此,我们可以将 a 和 b 减少为 m 和 x 。 因为它只是最后一位数。
您可以访问:this site for the better explanation to find out last digit of a^b