ตัวเลขหลักสุดท้ายในการยกกำลัง


14

ในงานนี้คุณจะได้รับ A (น้อยกว่า 10,000 หลัก) และ B (น้อยกว่า 2 ^ 64) และคุณจะต้องคำนวณตัวเลขสุดท้ายของ (A · A · A · ... · A (B ครั้ง ))

อินพุต A และ B ถูกกำหนดในบรรทัดเดียวคั่นด้วยช่องว่าง อินพุตถูกยกเลิกโดย EOF

อินพุต

34543232321323243242434544533445343432434311112223454323232132324324243454453344534343243431111222345432323213232432424345445334453434324343111122234543232321323243242434544533445343432434311112223454323232132324324243454453344534343243431111222345432323213232432424345445334453434324343111122234543232321323243242434544533445343432434311112223454323232132324324243454453344534343243431111222 22337254775808
38758436543765743875437656358764347568437658743658743454354645645543532487548758475847684756897548758457843758437584758478574857438758436587436587436587643875643856783478743658743658764387564387564378658437658743658743687564387564387564765746576475647564756475465746574675647654765476547534587545689475689748574385743765874585743857843765893748643587438957458754376543265874387564384764367584375874758943267632487564357 54545454123
6777744348435743587643756438765436574587564354375674365645643675 23232    
3875843654376574357 54545454

เอาท์พุต

6
3
5
9

ข้อ จำกัด

  • อย่าใช้ฟังก์ชัน inbuilt หรือตัวดำเนินการโอเวอร์โหลดเพื่อคำนวณ A B (คุณไม่จำเป็นต้องคำนวณมันเลย)
  • ทางออกที่สั้นที่สุดชนะ!

2
อนุญาตให้ใช้ตัวดำเนินการการยกกำลังเพื่อคำนวณสิ่งอื่นที่ไม่ใช่ A ** B หรือไม่
Lowjacker

ฉันคิดว่าทั้ง A และ B ไม่เป็นลบใช่ไหม
aaaaaaaaaaaa

คำตอบ:


9

J - 52 ตัวอักษร

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

ผ่านการทดสอบทั้งหมดที่กำหนดแม้ว่าจะลบช่องว่างต่อท้ายของอินพุตที่สามเท่านั้น (ฉันเดาว่านี่ไม่ได้ตั้งใจ)

โซลูชันจะทำงานใน j602 ในโหมดคอนโซล (เช่นในเทอร์มินัล emacs j-shell ฯลฯ ) มันจะไม่ทำงานใน j701 (ไม่wd)

คำอธิบาย & Mathiness:

'หมายเลขวิเศษ' 12 คือ LCM ของความยาวของตาราง "หลักสุดท้าย" ที่พบในคำตอบอื่น ๆ ตัวเลขทั้งหมดซ้ำด้วยจุด 1,2,3 หรือ 4 ดังนั้นพวกเขาจะทำซ้ำกับระยะเวลา 12 เพิ่มสิบสองในกรณีแก้ไขที่ b mod 12 = 0 โซลูชั่นของฉันคำนวณ (หลักสุดท้ายของ A) ^ (12+ (B mod 12)) ให้ตัวเลขที่มีหลักสุดท้ายเหมือนกัน (ฉันคิดว่าเป็นทางออกที่ไม่น่าสะพรึงกลัวกำจัดตัวละครทั้งสาม '12 + 'โดยใช้เช่น B mod 96 ที่ไม่มีตัวอย่างที่จะชนกัน ... )


6

Python 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

GolfScript 21

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

สิ่งนี้จะคำนวณA^C mod 10ว่า C อยู่ในช่วงใด[1,4]และC mod 4 = B mod 4ยกเว้นถ้า B เป็น 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 สำหรับการทนกับมัน
แม็กเคเล็บ

5

Ruby, 97 93 72 71 67 61 60

จัดการกับกรณีที่ b == 0 ด้วย

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

เดาว่ามันแย่กว่าที่จะใช้ตารางการค้นหา


มันให้ 1 เป็นเอาต์พุตในการให้2 5เป็นอินพุตและไม่ได้ให้เอาต์พุตที่ถูกต้องสำหรับกรณีตัวอย่างด้านบน ideone.com/2cOPy
fR0DDY

1
@ fR0DDY: มันทำงานได้อย่างสมบูรณ์แบบในระบบของฉันด้วย 1.9.2 เช่นกัน
Lowjacker

4

Windows PowerShell, 85

โซลูชัน O (1) รับคำใบ้จากโซลูชัน Ruby ของ Lowjacker ;-)

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

3

Python 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

Python ( 119 134 109)

ฉันเชื่อว่าข้อห้ามในฟังก์ชั่นในตัวใช้ไม่ได้กับ I / O

sys นำเข้า
p = แลมบ์ดา b, e: e และ p (b * b% 10, e / 2) * (~ e & 1 หรือ b)% 10 หรือ 1
สำหรับ l ใน sys.stdin: print p (* map (int, l.split ()))

แก้ไข:ลบการใช้ตัวดำเนินการการยกกำลังของ Python

แก้ไข:แทนที่ตัวดำเนินการแบบไตรภาคด้วยตัวดำเนินการบูลีนแบบลัดวงจร


ใช่คุณสามารถ / ต้องใช้ฟังก์ชั่น I / O ในการรับอินพุต แต่คุณไม่ควรใช้ '**' สำหรับงานนี้
Quixotic

นี้จะทำงานแม้ว่า แต่ฉันไม่ได้ตั้งใจจริงๆงานนี้สำหรับวิธีการยกกำลังเดรัจฉานบังคับ modular จริงมี O (1) ขั้นตอนวิธีการและก็สั้นมากเกินไป :-)
เพ้อฝัน

2

Python 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

Javascript ( 117 84 79 60 ตัวอักษร)

เพิ่ม 60 ตัวอักษรด้วยการปรับปรุงที่แนะนำจาก @JiminP และ @NoOneIsHere ขอขอบคุณ!

d = function (s, n) {a = Math.pow (s [s.length-1], n% 4 == 0? 1: n% 4) + ''; ส่งกลับ [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.