Nesta tarefa, você receberá A (menos de 10000 dígitos) e B (menos de 2 ^ 64) e precisará calcular o último dígito de (A · A · A · ... · A (B vezes )).
As entradas A e B são fornecidas em uma única linha separada por um espaço em branco; as entradas são finalizadas pelo EOF.
Entrada
34543232321323243242434544533445343432434311112223454323232132324324243454453344534343243431111222345432323213232432424345445334453434324343111122234543232321323243242434544533445343432434311112223454323232132324324243454453344534343243431111222345432323213232432424345445334453434324343111122234543232321323243242434544533445343432434311112223454323232132324324243454453344534343243431111222 22337254775808
38758436543765743875437656358764347568437658743658743454354645645543532487548758475847684756897548758457843758437584758478574857438758436587436587436587643875643856783478743658743658764387564387564378658437658743658743687564387564387564765746576475647564756475465746574675647654765476547534587545689475689748574385743765874585743857843765893748643587438957458754376543265874387564384764367584375874758943267632487564357 54545454123
6777744348435743587643756438765436574587564354375674365645643675 23232
3875843654376574357 54545454
Resultado
6
3
5
9
Restrições
- Não use nenhuma função embutida ou operadores sobrecarregados para calcular AB (você realmente não precisa calcular isso).
- A solução mais curta vence!
Respostas:
J - 52 caracteres
Passa em todos os testes fornecidos, embora apenas se os espaços à direita na terceira entrada forem removidos (acho que isso não foi intencional).
A solução funcionará no j602 no modo de console (por exemplo, no terminal, emacs j-shell, etc.). Não funcionará no j701 (não
wd
).Explicação e maturidade:
O 'número mágico' 12 é o LCM dos comprimentos das tabelas do "último dígito" encontrados nas outras respostas. Todos os dígitos se repetem com os períodos 1,2,3 ou 4, portanto, também se repetem com o período 12. Adicionando doze aos casos em que b mod 12 = 0. Minha solução calcula (último dígito de A) ^ (12+ (mod B 12)), fornecendo um número com o mesmo último dígito. (Eu considerei uma solução quebrada furtiva eliminando os três caracteres '12 + 'usando, por exemplo, B mod 96, onde nenhum exemplo provavelmente colidiria ...)
fonte
Python
125107 CharsSolução O (1)
fonte
GolfScript 21
Isso basicamente calcula
A^C mod 10
onde C está no intervalo[1,4]
eC mod 4 = B mod 4
, exceto se B for 0, C também será 0.Esse atalho é possível porque
A^(B+4) mod 10 = A^B mod 10
para qualquer número inteiro não negativo A e número inteiro positivo B.fonte
J, 79
fonte
Ruby,
97937271676160Também lida com o caso em que b == 0.
Acho que é realmente pior usar uma tabela de pesquisa.
fonte
2 5
como entrada e nem fornece saída correta para os casos de amostra acima. ideone.com/2cOPyWindows PowerShell, 85
Solução O (1). Peguei uma dica da solução Ruby do Lowjacker ;-)
fonte
Python 149 Chars
fonte
Python (
119134109)Confio que a proibição de funções internas não se aplique à E / S.
Editar: remova o uso do operador de exponenciação do Python.
Edit: operadores ternários substituídos por operadores booleanos em curto-circuito.
fonte
Python 3k
121 CharsO
(a*a)%10
não é necessário, mas acelera, então decidimos mantê-lo.Editar: Aparentemente, os parênteses não são necessários.
Enquanto isso, pensando na
O(1)
solução. :)fonte
Javascript (
117847960 caracteres)Atingiu 60 caracteres com as melhorias sugeridas em @JiminP e @NoOneIsHere. Obrigado!
d = função (s, n) {a = Math.pow (s [s.length-1], n% 4 == 0? 1: n% 4) + ''; retorna a [a.length-1] }Testar:
Resultados:
fonte
d=function(s,n){return(Math.pow(s.slice(-1),n%4||1)+'').slice(-1)}
: Pd=s,n=>(Math.pow(s.slice(-1),n%4||1)+'').slice(-1)
ou usar=>
?