Suma de dígitos en a^n hasta un solo dígito

Dados dos números a y n, la tarea es encontrar la suma única de dígitos de a^n (pow(a, n)). En la suma de un solo dígito, seguimos sumando dígitos hasta que queda un solo dígito.
Ejemplos: 
 

Input : a = 5, n = 4
Output : 4
5^4 = 625 = 6+2+5 = 13
Since 13 has two digits, we
sum again 1 + 3 = 4.

Input : a = 2, n = 8
Output : 4
2^8=256 = 2+5+6 = 13 = 1+3 = 4

Un enfoque ingenuo es primero encontrar a^n, luego encontrar la suma de los dígitos en a^n usando el enfoque discutido aquí .
El enfoque anterior puede causar desbordamiento. Una mejor solución se basa en la siguiente observación. 
 

int res = 1;
for (int i=1; i<=n; i++)
{
     res = res*a;
     res = digSum(res);
}

Here digSum() finds single digit sum 
of res. Please refer this for details
of digSum().

Ilustración del pseudocódigo anterior: 
 

Por ejemplo, sea a = 5, n = 4. 
Después de la primera iteración, 
res = 5
Después de la segunda iteración, 
res = 7 (Nota: 2 + 5 = 7)
Después de la tercera iteración, 
res = 8 (Nota: 3 + 5 = 8 )
Después de la 4ª iteración, 
res = 4 (Nota: 4 + 0 = 4)

Podemos escribir una función similar a una exponenciación modular rápida para evaluar digSum(a^n) que evalúa esto en pasos de log(n).
A continuación se muestra la implementación del enfoque anterior:
 

C++

// CPP program to find single digit
// sum of a^n.
#include <bits/stdc++.h>
using namespace std;
 
// This function finds single digit
// sum of n.
int digSum(int n)
{
    if (n == 0)
    return 0;
    return (n % 9 == 0) ? 9 : (n % 9);
}
 
// Returns single digit sum of a^n.
// We use modular exponentiation technique.
int powerDigitSum(int a, int n)
{
    int res = 1;
    while (n) {
        if (n % 2 == 1) {
            res = res * digSum(a);
            res = digSum(res);
        }
        a = digSum(digSum(a) * digSum(a));
        n /= 2;
    }
 
    return res;
}
 
// Driver code
int main()
{
    int a = 9, n = 4;
    cout << powerDigitSum(a, n);
    return 0;
}

Java

// Java program to find single digit
// sum of a^n.
 
import java.util.*;
import java.lang.*;
import java.io.*;
 
class GFG{
     
     
// This function finds single digit
// sum of n.
static int digSum(int n)
{
    if (n == 0)
    return 0;
    return (n % 9 == 0) ? 9 : (n % 9);
}
 
// Returns single digit sum of a^n.
// We use modular exponentiation technique.
static int powerDigitSum(int a, int n)
{
    int res = 1;
    while (n>0) {
        if (n % 2 == 1) {
            res = res * digSum(a);
            res = digSum(res);
        }
        a = digSum(digSum(a) * digSum(a));
        n /= 2;
    }
 
    return res;
}
 
// Driver code
public static void main(String args[])
{
    int a = 9, n = 4;
    System.out.print(powerDigitSum(a, n));
}
}

Python 3

# Python 3 Program to find single digit
# sum of a^n.
 
# This function finds single digit
# sum of n.
def digSum(n) :
 
    if n == 0 :
        return 0
 
    elif n % 9 == 0 :
        return 9
 
    else :
        return n % 9
 
# Returns single digit sum of a^n.
# We use modular exponentiation technique.
def powerDigitSum(a, n) :
 
    res = 1
    while(n) :
 
        if n %2 == 1 :
            res = res * digSum(a)
            res = digSum(res)
 
        a = digSum(digSum(a) * digSum(a))
        n //= 2
 
    return res
 
 
# Driver Code
if __name__ == "__main__" :
 
    a, n = 9, 4
    print(powerDigitSum(a, n))
 
# This code is contributed by ANKITRAI1

C#

// C# program to find single
// digit sum of a^n.
class GFG
{
 
// This function finds single
// digit sum of n.
static int digSum(int n)
{
    if (n == 0)
    return 0;
    return (n % 9 == 0) ?
                      9 : (n % 9);
}
 
// Returns single digit sum of a^n.
// We use modular exponentiation
// technique.
static int powerDigitSum(int a, int n)
{
    int res = 1;
    while (n > 0)
    {
        if (n % 2 == 1)
        {
            res = res * digSum(a);
            res = digSum(res);
        }
        a = digSum(digSum(a) * digSum(a));
        n /= 2;
    }
 
    return res;
}
 
// Driver code
static void Main()
{
    int a = 9, n = 4;
    System.Console.WriteLine(powerDigitSum(a, n));
}
}
 
// This Code is contributed by mits

PHP

<?php
// PHP program to find single 
// digit sum of a^n.
 
// This function finds single
// digit sum of n.
function digSum($n)
{
    if ($n == 0)
    return 0;
    return ($n % 9 == 0) ?
                 9 : ($n % 9);
}
 
// Returns single digit sum 
// of a^n. We use modular
// exponentiation technique.
function powerDigitSum($a, $n)
{
    $res = 1;
    while ($n)
    {
        if ($n % 2 == 1)
        {
            $res = $res * digSum($a);
            $res = digSum($res);
        }
        $a = digSum(digSum($a) *
             digSum($a));
        $n /= 2;
    }
 
    return $res;
}
 
// Driver code
$a = 9;
$n = 4;
echo powerDigitSum($a, $n);
 
// This code is contributed
// by Shivi_Aggarwal
?>

Javascript

<script>
 
// javascript program to find single digit
// sum of a^n.
 
// This function finds single digit
// sum of n.
function digSum( n)
{
    if (n == 0)
    return 0;
    return (n % 9 == 0) ? 9 : (n % 9);
}
 
// Returns single digit sum of a^n.
// We use modular exponentiation technique.
function powerDigitSum( a,  n)
{
    let res = 1;
    while (n) {
        if (n % 2 == 1) {
            res = res * digSum(a);
            res = digSum(res);
        }
        a = digSum(digSum(a) * digSum(a));
        n /= 2;
    }
 
    return res;
}
 
// Driver code
 
    let a = 9, n = 4;
    document.write( powerDigitSum(a, n));
     
// This code is contributed by todaysgaurav
 
 
</script>
Producción: 

9

 

Publicación traducida automáticamente

Artículo escrito por Bhashkar_P y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *