Open In App

Find unit digit of x raised to power y

Improve
Improve
Improve
Like Article
Like
Save Article
Save
Share
Report issue
Report

Given two numbers x and y, find unit digit of xy.

Examples : 

Input  : x = 2, y = 1
Output : 2
Explanation
2^1 = 2 so units digit is 2.

Input : x = 4, y = 2
Output : 6
Explanation
4^2 = 16 so units digit is 6.

Method 1 (Simple) Compute value of xy and find its last digit. This method causes overflow for slightly larger values of x and y.
Method 2 (Efficient) 
1) Find last digit of x. 
2) Compute x^y under modulo 10 and return its value. 

C++




// Efficient C++ program to
// find unit digit of x^y.
#include <bits/stdc++.h>
using namespace std;
 
// Returns unit digit of x
// raised to power y
int unitDigitXRaisedY(int x, int y)
{
    // Initialize result as 1 to
    // handle case when y is 0.
    int res = 1;
 
    // One by one multiply with x
    // mod 10 to avoid overflow.
    for (int i = 0; i < y; i++)
        res = (res * x) % 10;
 
    return res;
}
 
// Driver program
int main()
   cout << unitDigitXRaisedY(4, 2);
   return 0;
}


Java




// Efficient Java program to find
// unit digit of x^y.
import java.io.*;
 
class GFG {
    // Returns unit digit of x raised to power y
    static int unitDigitXRaisedY(int x, int y)
    {
        // Initialize result as 1 to
        // handle case when y is 0.
        int res = 1;
     
        // One by one multiply with x
        // mod 10 to avoid overflow.
        for (int i = 0; i < y; i++)
            res = (res * x) % 10;
     
        return res;
    }
     
    // Driver program
    public static void main(String args[])throws IOException
    {
    System.out.println(unitDigitXRaisedY(4, 2));
    }
}
 
// This code is contributed by Nikita Tiwari.


Python3




# Python3 code to find
# unit digit of x^y.
 
# Returns unit digit of
# x raised to power y
def unitDigitXRaisedY( x , y ):
 
    # Initialize result as 1 to
    # handle case when y is 0.
    res = 1
     
    # One by one multiply with x
    # mod 10 to avoid overflow.
    for i in range(y):
        res = (res * x) % 10
     
    return res
     
# Driver program
print( unitDigitXRaisedY(4, 2))
 
 
# This code is contributed by Abhishek Sharma44.


C#




// Efficient Java program to find
// unit digit of x^y.
using System;
 
class GFG
{
    // Returns unit digit of x raised to power y
    static int unitDigitXRaisedY(int x, int y)
    {
        // Initialize result as 1 to
        // handle case when y is 0.
        int res = 1;
     
        // One by one multiply with x
        // mod 10 to avoid overflow.
        for (int i = 0; i < y; i++)
            res = (res * x) % 10;
     
        return res;
    }
     
    // Driver program
    public static void Main()
    {
    Console.WriteLine(unitDigitXRaisedY(4, 2));
    }
}
 
// This code is contributed by vt_m.


PHP




<?php
// Efficient PHP program to
// find unit digit of x^y.
 
// Returns unit digit of x
// raised to power y
function unitDigitXRaisedY($x, $y)
{
    // Initialize result as 1 to
    // handle case when y is 0.
    $res = 1;
 
    // One by one multiply with x
    // mod 10 to avoid overflow.
    for ($i = 0; $i < $y; $i++)
        $res = ($res * $x) % 10;
 
    return $res;
}
 
// Driver Code
echo(unitDigitXRaisedY(4, 2));
 
// This code is contributed by Ajit.
?>


Javascript




<script>
 
// Efficient Javascript program to
// find unit digit of x^y.
 
// Returns unit digit of x
// raised to power y
function unitDigitXRaisedY(x, y)
{
     
    // Initialize result as 1 to
    // handle case when y is 0.
    let res = 1;
 
    // One by one multiply with x
    // mod 10 to avoid overflow.
    for(let i = 0; i < y; i++)
        res = (res * x) % 10;
 
    return res;
}
 
// Driver Code
document.write(unitDigitXRaisedY(4, 2));
 
// This code is contributed by _saurabh_jaiswal.
 
</script>


Output

6

Output : 

6

Time Complexity: O(y), where y is the power
Auxiliary Space: O(1), as no extra space is required
Further Optimizations: We can compute modular power in Log y.

Method 3 (Direct based on cyclic nature of last digit) 
This method depends on the cyclicity with the last digit of x that is

x   |  power 2  |  power 3  |   power 4  | Cyclicity  
0   | .................................. |  .... repeat with 0
1   | .................................. |  .... repeat with 1
2   |     4     |     8     |      6     | .... repeat with 2
3   |     9     |     7     |      1     | .... repeat with 3
4   |     6     |....................... |  .... repeat with 4
5   | .................................. |  .... repeat with 5
6   | .................................. |  .... repeat with 6
7   |     9     |     3     |      1     | .... repeat with 7
8   |     4     |     2     |      6     | .... repeat with 8
9   |     1     | ...................... |  .... repeat with 9 

So here we directly mod the power y with 4 because this is the last power after this all number’s repetition start 
after this we simply power with number x last digit then we get the unit digit of produced number. 

C++




// C++ code to find the unit digit of x
// raised to power y.
#include<iostream>
#include<math.h>
using namespace std;
 
// find unit digit
int unitnumber(int x, int y)
{
    // Get last digit of x
    x = x % 10;
       
    // Last cyclic modular value
    if(y!=0)
        y = y % 4 + 4;
 
    // here we simply return the
    // unit digit or the power
    // of a number
    return (((int)(pow(x, y))) % 10);
}
 
int main()
{
    int x = 133, y = 5;
     
    // get unit digit number here we pass
    // the unit  digit of x and the last
    // cyclicity number that is y%4
    cout << unitnumber(x, y);
  
    return 0;
}


Java




// Java code to find the unit
// digit of x  raised to power y.
import java.io.*;
import java.util.*;
 
class GFG {
     
    // find unit digit
    static int unitnumber(int x, int y)
    {
        // Get last digit of x
        x = x % 10;
             
        // Last cyclic modular value
        if(y!=0)
             y = y % 4 + 4;
     
        // here we simply return the
        // unit digit or the power
        // of a number
        return (((int)(Math.pow(x, y))) % 10);
    }
     
     
    public static void main (String[] args)
    {
        int x = 133, y = 5;
     
        // get unit digit number here we pass
        // the unit digit of x and the last
        // cyclicity number that is y%4
        System.out.println(unitnumber(x, y));
     
    }
}
 
// This code is contributed by Gitanjali.


Python3




# Python3 code to find the unit  
# digit of x raised to power y.
import math
 
# Find unit digit
def unitnumber(x, y):
 
    # Get last digit of x
    x = x % 10
         
    # Last cyclic modular value
    if y!=0:
         y = y % 4 + 4
 
    # Here we simply return 
    # the unit digit or the 
    # power of a number
    return (((int)(math.pow(x, y))) % 10)
 
 
# Driver code
x = 133; y = 5
     
# Get unit digit number here we pass
# the unit digit of x and the last
# cyclicity number that is y%4
print(unitnumber(x, y))
 
 
# This code is contributed by Gitanjali.


C#




// C# code to find the unit
// digit of x raised to power y.
using System;
 
class GFG {
     
    // find unit digit
    static int unitnumber(int x, int y)
    {
        // Get last digit of x
        x = x % 10;
             
        // Last cyclic modular value
        if(y!=0)
             y = y % 4 + 4;
     
        // here we simply return the
        // unit digit or the power
        // of a number
        return (((int)(Math.Pow(x, y))) % 10);
    }
     
    // Driver code
    public static void Main ()
    {
        int x = 133, y = 5;
     
        // get unit digit number here we pass
        // the unit digit of x and the last
        // cyclicity number that is y%4
        Console.WriteLine(unitnumber(x, y));
     
    }
}
 
// This code is contributed by vt_m.


PHP




<?php
// PHP code to find the unit
// digit of x raised to power y.
 
// find unit digit
function unitnumber($x, $y)
{
    // Get last digit of x
    $x = $x % 10;
     
    // Last cyclic modular value
    if($y!=0)
        $y = $y % 4 + 4;
 
    // here we simply return the
    // unit digit or the power
    // of a number
    return (((int)(pow($x, $y))) % 10);
}
 
// Driver code
$x = 133; $y = 5;
     
// get unit digit number here we pass
// the unit digit of x and the last
// cyclicity number that is y%4
echo(unitnumber($x, $y));
 
// This code is contributed by Ajit.
?>


Javascript




<script>
 
// Javascript code to find the unit
// digit of x raised to power y.
 
// find unit digit
function unitnumber(x, y)
{
     
    // Get last digit of x
    x = x % 10;
     
    // Last cyclic modular value
    if (y != 0)
        y = y % 4 + 4;
 
    // here we simply return the
    // unit digit or the power
    // of a number
    return ((parseInt(Math.pow(x, y))) % 10);
}
 
// Driver code
let x = 133;
let y = 5;
     
// get unit digit number here we pass
// the unit digit of x and the last
// cyclicity number that is y%4
document.write(unitnumber(x, y));
 
// This code is contributed by _saurabh_jaiswal.
 
</script>


Output

3

Time Complexity: O(log n)
Auxiliary Space: O(1)

Approach: Binomial Expansion method

Here are the steps to find the unit digit of x raised to power y using the Binomial Expansion method:

1. Handle special cases:

If y is 0, return 1 as any number raised to power 0 is 1.
If x is 0, return 0 as any number raised to power 0 is 1 and the unit digit of 0 is 0.

2. Calculate the y-th term in the expansion of (x+10)^y using the binomial theorem:

The y-th term in the expansion is given by: C(y, 0)x^y10^0 + C(y, 1)*x^(y-1)*10^1 + … + C(y, y)x^010^y
Here, C(y, k) represents the binomial coefficient, which is equal to y! / (k! * (y-k)!).
We only need to calculate the last term in this expansion, which is C(y, y)x^010^y.

3. Find the unit digit of the y-th term:

The unit digit of the y-th term is the same as the last digit of the y-th term.
We can find the last digit of the y-th term by taking the remainder of the term when divided by 10.

4. Return the unit digit found in step 3 as the result.

C++




#include <iostream>
#include <cmath>
using namespace std;
 
int unit_digit(int x, int y) {
    if (y == 0) {
        return 1;
    }
    if (x == 0) {
        return 0;
    }
    int term = pow(x + 10, y);
    int last_digit = term % 10;
    return last_digit;
}
 
int main() {
    cout << unit_digit(2, 1) << endl;  // Output: 2
    cout << unit_digit(4, 2) << endl;  // Output: 6
    return 0;
}
// This is contributed by uppalasridevi


Java




import java.lang.Math;
 
public class Main {
    public static int unitDigit(int x, int y) {
        if (y == 0) {
            return 1;
        }
        if (x == 0) {
            return 0;
        }
        int term = (int) Math.pow(x + 10, y);
        int lastDigit = term % 10;
        return lastDigit;
    }
 
    public static void main(String[] args) {
        System.out.println(unitDigit(2, 1)); // Output: 2
        System.out.println(unitDigit(4, 2)); // Output: 6
    }
}


Python3




def unit_digit(x, y):
    if y == 0:
        return 1
    if x == 0:
        return 0
    term = (x+10)**y
    last_digit = term % 10
    return last_digit
 
# Using the binomial theorem method
print(unit_digit(2, 1))  # Output: 2
# Using the binomial theorem method
print(unit_digit(4, 2))  # Output: 6
 
# This is contributed by uppalasridevi


C#




// C# Code for the above approach
using System;
 
public class MainClass {
 
    // Function to find the unit digit
    public static int UnitDigit(int x, int y)
    {
        if (y == 0) {
            return 1;
        }
        if (x == 0) {
            return 0;
        }
        int term = (int)Math.Pow(x + 10, y);
        int lastDigit = term % 10;
        return lastDigit;
    }
 
    // Driver Code
 
    public static void Main(string[] args)
    {
        Console.WriteLine(UnitDigit(2, 1)); // Output: 2
        Console.WriteLine(UnitDigit(4, 2)); // Output: 6
    }
}


Javascript




function unitDigit(x, y) {
    if (y == 0) {
        return 1;
    }
    if (x == 0) {
        return 0;
    }
    let term = Math.pow(x + 10, y);
    let lastDigit = term % 10;
    return lastDigit;
}
 
console.log(unitDigit(2, 1)); // Output: 2
console.log(unitDigit(4, 2)); // Output: 6


Output

2
6

The time complexity  is O(log y), where y is the input variable

The auxiliary space also O(1)

Thanks to DevanshuAgarwal for suggesting above solution.
How to handle large numbers? 
Efficient method for Last Digit Of a^b for Large Numbers
 



Last Updated : 12 Apr, 2023
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads