지수의 마지막 숫자


14

이 작업에서는 A (길이 10000 자리 미만)와 B (2 ^ 64 미만)가 주어지며 (A · A · A · ... · A (B 배)의 마지막 자리를 계산해야합니다. )).

입력 A와 B는 공백으로 구분 된 한 줄로 제공됩니다. 입력은 EOF에 의해 종료됩니다.

입력

34543232321323243242434544533445343432434311112223454323232132324324243454453344534343243431111222345432323213232432424345445334453434324343111122234543232321323243242434544533445343432434311112223454323232132324324243454453344534343243431111222345432323213232432424345445334453434324343111122234543232321323243242434544533445343432434311112223454323232132324324243454453344534343243431111222 22337254775808
38758436543765743875437656358764347568437658743658743454354645645543532487548758475847684756897548758457843758437584758478574857438758436587436587436587643875643856783478743658743658764387564387564378658437658743658743687564387564387564765746576475647564756475465746574675647654765476547534587545689475689748574385743765874585743857843765893748643587438957458754376543265874387564384764367584375874758943267632487564357 54545454123
6777744348435743587643756438765436574587564354375674365645643675 23232    
3875843654376574357 54545454

산출

6
3
5
9

제약

  • 어떤 사용하지 마십시오 붙박이 기능 또는 오버로드 된 연산자를 컴퓨하는 B를 (당신은 정말 전혀 있음을 계산 할 필요가 없습니다).
  • 최단 솔루션이 승리합니다!

2
지수 연산자를 사용하여 A ** B 이외의 것을 계산할 수 있습니까?
Lowjacker

A와 B가 모두 음이 아닌 것으로 가정합니다.
aaaaaaaaaaaa

답변:


9

J-52 자

wd,.10|(^12+12&|)/"1(".@{:`".;._2@,&'x ');._2(1!:1)3

세 번째 입력의 후행 공백이 제거 된 경우에만 주어진 모든 테스트를 통과합니다 (이것은 의도하지 않은 것으로 추측됩니다).

솔루션은 콘솔 모드 (예 : 터미널, emacs j-shell 등)의 j602에서 작동합니다. j701 (no wd) 에서는 작동하지 않습니다 .

설명 및 Mathiness :

'마법 번호'12는 다른 답변에서 찾은 "마지막 숫자"테이블 길이의 LCM입니다. 모든 숫자는 기간 1, 2, 3 또는 4로 반복되므로 기간 12에서도 반복됩니다. 12에 추가하면 b mod 12 = 0 인 경우가 수정됩니다. 내 솔루션은 (마지막 A) ^ (12+ (B mod)를 계산합니다. 12)), 같은 마지막 숫자로 숫자를 제공합니다. (나는 예가 충돌하지 않을 것 같은 B mod 96을 사용하여 세 문자 '12 + '를 제거하는 교묘 한 깨진 해결책을 고려했습니다 ...


6

파이썬 125 개 107 숯을

O (1) 솔루션

while 1:a,b=map(int,raw_input().split());d=1;exec"d*=a;"*(b%4);c=a%5and d%5;print b/~b+1or c+[0,5][c%2-a%2]

좋은 +1.
Quixotic

6

골프 스크립트 21

~]2/{~.(4%)and?10%n}/

이것은 기본적으로 계산 A^C mod 10C의 범위에 있는지 [1,4]C mod 4 = B mod 4B가 0 인 경우, 다음 C는 0을 제외.

A^(B+4) mod 10 = A^B mod 10음수가 아닌 정수 A와 양의 정수 B에 대해이 단축키가 가능 합니다.


5

J, 79

,._2(4 :'10|x^(+y&(|~))x{10$1 1 4 4 2')/\x:".(]_1&{.`];._2~(' ',LF)e.~])(1!:1)3

와우 그건 못 생겼어! 이 언어를 배우지 말라고 상기시켜주십시오. 참기 +1
Caleb

5

루비, 97 93 72 71 67 61 60

b == 0 인 경우도 처리합니다.

#!ruby -nl
~/ /
p eval"#$`%10*"*($'>?0?($'.to_i-1)%4+1:0)+?1

조회 테이블을 사용하는 것이 실제로 더 나쁜 것 같아요.


2 5입력 으로 제공 할 때 출력으로 1을 제공 하고 위의 샘플 케이스에 대해 올바른 출력도 제공하지 않습니다. ideone.com/2cOPy
fR0DDY

1
@ fR0DDY : 그것은 1.9.2와 함께 내 시스템에서 완벽하게 작동합니다.
Lowjacker

4

윈도우 PowerShell, 85

O (1) 솔루션. Lowjacker의 Ruby 솔루션에서 힌트를 얻었습니다. ;-)

$input|%{$a,$b=-split$_
'0000111162481397646455556666179368421919'[4*$a[-1]%48+$b%4]}

3

파이썬 149 문자

p=[[0],[1],[6,2,4,8],[1,3,9],[6,4],[5],[6],[1,7,9,3],[6,8,4,2],[1,9]]
while 1:a,b=map(int,raw_input().split());print b/~b+1or p[a%10][b%len(p[a%10])]

3

파이썬 ( 119 (134) 109)

내장 기능에 대한 금지는 I / O에 적용되지 않는다고 생각합니다.

수입 시스템
p = 람다 b, e : e 및 p (b * b % 10, e / 2) * (~ e & 1or b) % 10or 1
sys.stdin에서 l의 경우 : print p (* map (int, l.split ()))

편집 : 파이썬 지수 연산자의 사용을 제거하십시오.

편집 : 삼항 연산자를 단락 부울 연산자로 대체했습니다.


예, 입력을 가져 오기 위해 I / O 기능을 사용할 수는 있지만 반드시이 작업에 '**'를 사용해서는 안됩니다.
Quixotic

이것은 작동하지만 실제로는 무차별 강제 모듈 식 지수 솔루션에 대한이 작업을 의도하지는 않습니다. 실제로 O (1) 알고리즘이 있으며 너무 짧습니다 :-)
Quixotic

2

파이썬 3k

121 문자

def p(a,b):
  if b<1:return 1
  return p(a*a%10,b//2)*[1,a][b%2]%10
while 1:
  a,b=map(int,input().split())
  print(p(a%10,b))

(a*a)%10그래서 그것을 유지하기로 결정, 필요는 없지만 그것을 속도가 빨라집니다.

편집 : 분명히 괄호는 필요하지 않습니다.

한편, O(1)솔루션 에 대한 생각 . :)


EOF 후에 루프 오류가 발생하지 않습니까?
Hoa Long Tam

2

자바 스크립트 ( 117 84 79 60 자)

@JiminP 및 @NoOneIsHere에서 제안 된 개선 사항으로 60 자에 도달했습니다. 감사합니다!

d = 함수 (s, n) {a = Math.pow (s [s.length-1], n % 4 == 0? 1 : n % 4) + ''; a [a.length-1] 반환 }

d=(s,n)=>{return(Math.pow(s.slice(-1),n%4||1)+'').slice(-1)}

테스트하려면 :

console.log(d('243242434544533445343432434311112223454323232132324324243454453344534343243431111222345432323213232432424345445334453434324343111122234543232321323243242434544533445343432434311112223454323232132324324243454453344534343243431111222345432323213232432424345445334453434324343111122234543232321323243242434544533445343432434311112223454323232132324324243454453344534343243431111222', 22337254775808));
console.log(d('38758436543765743875437656358764347568437658743658743454354645645543532487548758475847684756897548758457843758437584758478574857438758436587436587436587643875643856783478743658743658764387564387564378658437658743658743687564387564387564765746576475647564756475465746574675647654765476547534587545689475689748574385743765874585743857843765893748643587438957458754376543265874387564384764367584375874758943267632487564357', 54545454123));
console.log(d('6777744348435743587643756438765436574587564354375674365645643675', 23232));
console.log(d('3875843654376574357', 54545454));

결과 :

2
3
5
9

1
d=function(s,n){return(Math.pow(s.slice(-1),n%4||1)+'').slice(-1)}: P
JiminP

1
JavaScript를 많이 사용하지 않지만 전혀 사용 d=s,n=>(Math.pow(s.slice(-1),n%4||1)+'').slice(-1)하거나 사용할 =>수 없습니까?
NoOneIsHere
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.