Ссылка, которую вы указываете, запрашивает последнюю цифру номера.Чтобы найти такую вещь, было бы безумно вычислять чрезвычайно большое число (которое может превысить емкость памяти известного юниверса для записи (*)) только для того, чтобы найти окончательную цифру.Рабочий мод 10.
Два наблюдения:
1) n^e % 10 === d^e % 10 // d = last digit of n
2) If e = 10q+r then n^e % 10 === (n^10)^q * n^d %10
Это позволяет нам написать:
const lastDigit = function(str1, str2){
//in the following helper function d is an integer and exp a string
const lastDigitHelper = function(d,exp){
if(exp.length === 1){
let e = parseInt(exp);
return Math.pow(d,e) % 10;
} else {
let r = parseInt(exp.slice(-1));
let q = exp.slice(0,-1);
return lastDigitHelper(Math.pow(d,10) % 10,q) * Math.pow(d,r) % 10;
}
}
let d = parseInt(str1.slice(-1));
return lastDigitHelper(d,str2);
}
Это проходит все тесты, но не так эффективнокак могло бы быть.Рекурсивная вспомогательная функция может быть заменена циклом.
(*) Для забавы: одним из тестовых примеров было вычисление последней цифры
1606938044258990275541962092341162602522202993782792835301376 ^ 2037035976334486086268445688409378161051468393665936250636140449354381299763336706183397376
Если записано в базе 2,это число будет приблизительно 4,07 x 10 ^ 92 бит в длину.Поскольку во вселенной меньше атомов, это число слишком велико, чтобы его можно было хранить, не говоря уже о том, что на вычисление уходит слишком много времени.