Recursive sum of digit in n^x, where n and x are very large
Last Updated :
08 Apr, 2021
Given very large numbers n and x, we need to find the sum of digits of n^x such that :
If n^x < 10
digSum(n^x) = n^x
Else
digSum(n^x) = Sum(digSum(n^x))
Examples:
Input : 5 4
Output : 4
We know 54 = 625
Sum of digits in 625 = 6 + 2 + 5 = 13
Sum of digits in 13 = 1 + 3 = 4
Input : 546878 56422
Output : 7
Prerequisite : Recursive sum of digits.
The idea is:
Sum of digits repeats after every 6th exponents.
Let SoD(n) = a
Let b = x % 6
then
SoD(n^x) = SoD(a^b) except for b = 1 when a = 3 & 6
SoD(n^x) = 9 forall x > 1, when a = 3 & 6
C++
// CPP Code for Sum of
// digit of n^x where
// n and x are very large
#include <bits/stdc++.h>
using namespace std;
// function to get sum
// of digits of a number
long digSum(long n)
{
if (n == 0)
return 0;
return (n % 9 == 0)
? 9 : (n % 9);
}
// function to return sum
long PowDigSum(long n, long x)
{
// Find sum of digits in n
long sum = digSum(n);
// Find remainder of exponent
long rem = x % 6;
if ((sum == 3 || sum == 6)
&& x > 1)
return 9;
else if (x == 1)
return sum;
else if (x == 0)
return 1;
else if (rem == 0)
return digSum((long)pow(sum, 6));
else
return digSum((long)pow(sum, rem));
}
// Driver code
int main()
{
int n = 33333;
int x = 332654;
cout << PowDigSum(n, x);
return 0;
}
// This code is contributed by Gitanjali.
Java
// Java Code for
// Sum of digit of
// n^x where n and
// x are very large
import java.util.*;
class GFG {
// function to get sum
// of digits of a number
static long digSum(long n)
{
if (n == 0)
return 0;
return (n % 9 == 0) ? 9 : (n % 9);
}
// function to return sum
static long PowDigSum(long n, long x)
{
// Find sum of digits in n
long sum = digSum(n);
// Find remainder of exponent
long rem = x % 6;
if ((sum == 3 || sum == 6) && x > 1)
return 9;
else if (x == 1)
return sum;
else if (x == 0)
return 1;
else if (rem == 0)
return digSum((long)Math.pow(sum, 6));
else
return digSum((long)Math.pow(sum, rem));
}
/* Driver program to test above function */
public static void main(String[] args)
{
int n = 33333;
int x = 332654;
System.out.println(PowDigSum(n, x));
}
}
// This code is contributed by Arnav Kr. Mandal.
Python3
# Python3 Code for Sum
# of digit of n^x
import math
# function to get
# sum of digits of
# a number
def digSum(n):
if (n == 0):
return 0
if n % 9==0 :
return 9
else:
return (n % 9)
# function to return sum
def PowDigSum(n, x):
# Find sum of
# digits in n
sum = digSum(n)
# Find remainder
# of exponent
rem = x % 6
if ((sum == 3 or sum == 6) and x > 1):
return 9
elif (x == 1):
return sum
elif (x == 0):
return 1
elif (rem == 0):
return digSum(math.pow(sum, 6))
else:
return digSum(math.pow(sum, rem))
# Driver method
n = 33333
x = 332654
print (PowDigSum(n, x))
# This code is contributed by Gitanjali
C#
// C# Code for Sum of digit of
// n^x where n and x are very large
using System;
class GFG {
// Function to get sum
// of digits of a number
static long digSum(long n)
{
if (n == 0)
return 0;
return (n % 9 == 0) ? 9 : (n % 9);
}
// Function to return sum
static long PowDigSum(long n, long x)
{
// Find sum of digits in n
long sum = digSum(n);
// Find remainder of exponent
long rem = x % 6;
if ((sum == 3 || sum == 6) && x > 1)
return 9;
else if (x == 1)
return sum;
else if (x == 0)
return 1;
else if (rem == 0)
return digSum((long)Math.Pow(sum, 6));
else
return digSum((long)Math.Pow(sum, rem));
}
// Driver Code
public static void Main()
{
int n = 33333;
int x = 332654;
Console.WriteLine(PowDigSum(n, x));
}
}
// This code is contributed by vt_m.
PHP
<?php
// PHP Code for Sum of
// digit of n^x where
// function to get sum
// of digits of a number
function digSum($n)
{
if ($n == 0)
return 0;
return ($n % 9 == 0)
? 9 : ($n % 9);
}
// function to return sum
function PowDigSum($n, $x)
{
// Find sum of digits in n
$sum = digSum($n);
// Find remainder of exponent
$rem = $x % 6;
if (($sum == 3 || $sum == 6)
&& $x > 1)
return 9;
else if ($x == 1)
return $sum;
else if ($x == 0)
return 1;
else if ($rem == 0)
return digSum(pow($sum, 6));
else
return digSum(pow($sum, $rem));
}
// Driver code
$n = 33333;
$x = 332654;
echo PowDigSum($n, $x);
// This code is contributed by aj_36.
?>
JavaScript
<script>
// JavaScript Code for Sum of
// digit of n^x where
// n and x are very large
// function to get sum
// of digits of a number
function digSum(n)
{
if (n == 0)
return 0;
return (n % 9 == 0)
? 9 : (n % 9);
}
// function to return sum
function PowDigSum(n, x)
{
// Find sum of digits in n
let sum = digSum(n);
// Find remainder of exponent
let rem = x % 6;
if ((sum == 3 || sum == 6)
&& x > 1)
return 9;
else if (x == 1)
return sum;
else if (x == 0)
return 1;
else if (rem == 0)
return digSum(Math.pow(sum, 6));
else
return digSum(Math.pow(sum, rem));
}
// Driver code
let n = 33333;
let x = 332654;
document.write(PowDigSum(n, x));
</script>
Output:
9
Explore
DSA Fundamentals
Data Structures
Algorithms
Advanced
Interview Preparation
Practice Problem