Last Digit of A ^ B
Submit solution
Points:
100 (partial)
Time limit:
2.0s
Memory limit:
64M
Author:
Problem type
Allowed languages
Ada, BrainF***, C, C#, C++, Dart, Go, Java, JS, Kotlin, Lua, Prolog, Python, Swift, VB
Nestor is doing his math homework, a subject in which he has had many operations that did in the past three days and is very tired. The task is that given two numbers A and B are want to find the last digit of . You must help Nestor with this task. Will be given two numbers: the base and the index . You will find the last digit of the result of .
Input specification
The first line of the entry contains a number T, the number of test cases. T lines follow. For each test case, a line with A and B separated by a space.
Output specification
For each test case should print a line with the result.
Sample input
2
3 10
6 2
Sample output
9
6
Comments
This comment is hidden due to too much negative feedback. Show it anyway.
Bro, te pasa lo mismo que te mencioné en un comentario ayer. Esa forma de manejar entradas es incorrecta, ya que estás tomando un input por línea, pero te están dando dos. Un equivalente a tu problema sería:
Esto va a dar TLE (Time Limit Exceeded) porque se demora mucho tiempo. Para resolverlo vas a necesitar algo de algoritmia, pero la gran mayoría de problemas de DMOJ toman inputs de la misma forma. En C++,
cin
maneja las entradas de forma correcta, mientras que en Pythoninput()
toma una línea completa.Para que tengas un ejemplo claro: si tienes la entrada
3 10
en C++, cadacin
se acaba con un espacio. Es decir, si pones:entonces
x = 3
.Pero en Python,
input()
toma una línea entera, es decir,"3 10"
. Si intentas tomar dos inputs separados como lo haces aquí:obtendrás en el primer
input()
algo como"3 10"
, y en el segundo"6 2"
. Cuando intentes convertir"3 10"
a entero, claramente no va a funcionar, ya que no es un valor numérico válido, además de que estarás pidiendo el doble de líneas que las que tiene la entrada. Esto lleva a errores de tipo (IR).La forma correcta sería separando lo que tomas en un
input()
para convertirlo a enteros. Por ejemplo,"3 10"
no se puede convertir directamente a entero, pero"3"
y"10"
sí. Para esto, puedes usar el métodosplit()
que convierte un string en un array separado por un delimitador dado. Por ejemplo:Esto generará
y = ["3", "10", "5"]
, y ahora sí podrías manejar la entrada correctamente.Esto pasa con muchos lenguajes de programación que toman como entrada la línea completa. Espero que esta vez haya quedado claro, traté de explicarlo lo mejor que pude.
Waho. Aniervs, muchas gracias por tu ayuda.
Pueden darme una pista acerca de cómo resolver este ejercicio.
El problema se puede refrasear como calcular ; eso es lo mismo que . Ahora que tenemos , fácilmente (con fuerza bruta o a lápiz y papel) podemos sacar el ciclo de las potencias de cada número menor que 10, y con eso puedes calcular cualquier potencia rápidamente, por ejemplo: si , entonces las potencias de lucen: , y así sucesivamente.
Por otro lado, puedes usar un algoritmo básico llamado potenciación rápida. Sabemos que:
Con esa formulación recursiva puedes calcular a partir de ; por tanto luego de pasos hallas el resultado. Tener en cuenta que las operaciones aritméticas deben ser realizadas módulo .