Find Last Digit of a^b for Large Numbers
You are given two integer numbers, the base a (number of digits d, such that 1 <= d <= 1000) and the index b (0 <= b <= 922*10^15). You have to find the last digit of a^b.
Input : 3 10 Output : 9 Input : 6 2 Output : 6 Input : 150 53 Output : 0
After taking few examples, we can notice below pattern.
Number | Last digits that repeat in cycle 1 | 1 2 | 4, 8, 6, 2 3 | 9, 7, 1, 3 4 | 6, 4 5 | 5 6 | 6 7 | 9, 3, 1, 7 8 | 4, 2, 6, 8 9 | 1, 9
In the given table, we can see that maximum length for cycle repetition is 4.
Example: 2*2 = 4*2 = 8*2 = 16*2 = 32 last digit in 32 is 2 that means after multiplying 4 times digit repeat itself. So the algorithm is very simple .
Source : Brilliants.org
- Since number are very large we store them as a string.
- Take last digit in base a.
- Now calculate b%4. Here b is very large.
- If b%4==0 that means b is completely divisible by 4, so our exponent now will be exp = 4 because by multiplying number 4 times, we get the last digit according to cycle table in above diagram.
- If b%4!=0 that means b is not completely divisible by 4, so our exponent now will be exp=b%4 because by multiplying number exponent times, we get the last digit according to cycle table in above diagram.
- Now calculate ldigit = pow( last_digit_in_base, exp ).
- Last digit of a^b will be ldigit%10.
Below is the implementation of above algorithm.
# Python 3 code to find last digit of a ^ b
# Function to find b % a
def Modulo(a, b) :
# Initialize result
mod = 0
# calculating mod of b with a to make
# b like 0 <= b < a
for i in range(0, len(b)) :
mod = (mod * 10 + (int)(b[i])) % a
return mod # return modulo
# function to find last digit of a ^ b
def LastDigit(a, b) :
len_a = len(a)
len_b = len(b)
# if a and b both are 0
if (len_a == 1 and len_b == 1 and b == '0' and a == '0') :
# if exponent is 0
if (len_b == 1 and b=='0') :
# if base is 0
if (len_a == 1 and a == '0') :
# if exponent is divisible by 4 that means last
# digit will be pow(a, 4) % 10.
# if exponent is not divisible by 4 that means last
# digit will be pow(a, b % 4) % 10
if((Modulo(4, b) == 0)) :
exp = 4
exp = Modulo(4, b)
# Find last digit in 'a' and compute its exponent
res = math.pow((int)(a[len_a - 1]), exp)
# Return last digit of result
return res % 10
# Driver program to run test case
a = ['1', '1', '7']
b = ['3']
# This code is contributed to Nikita Tiwari.
This article is contributed by Shashank Mishra ( Gullu ). This article is reviewed by team geeksforgeeks.
Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.
Attention reader! Don’t stop learning now. Get hold of all the important mathematical concepts for competitive programming with the Essential Maths for CP Course at a student-friendly price. To complete your preparation from learning a language to DS Algo and many more, please refer Complete Interview Preparation Course.