¿Cómo calcular mod de un número grande?

Dado un gran número ‘num’ representado como una string y un entero x, encuentre el valor de «num % x» o «num mod x». La salida se espera como un número entero.

Ejemplos: 

Input:  num = "12316767678678",  a = 10
Output: num (mod a) ≡ 8

La idea es procesar todos los dígitos uno por uno y usar la propiedad que 

xy (mod a) ≡ ((x (mod a) * 10) + (y (mod a))) mod a

donde, x : dígito más a la izquierda

y: resto de dígitos excepto x.

por ejemplo: 

625 % 5 = (((6 % 5)*10) + (25 % 5)) % 5 = 0

A continuación se muestra la implementación.

Gracias a utkarsh111 por sugerir la siguiente solución.

C++

// C++ program to compute mod of a big number represented
// as string
#include <iostream>
using namespace std;
 
// Function to compute num (mod a)
int mod(string num, int a)
{
    // Initialize result
    int res = 0;
 
    // One by one process all digits of 'num'
    for (int i = 0; i < num.length(); i++)
        res = (res * 10 + (int)num[i] - '0') % a;
 
    return res;
}
 
// Driver program
int main()
{
    string num = "12316767678678";
    cout << mod(num, 10);
    return 0;
}

Java

// Java program to compute mod of a big
// number represented as string
import java.io.*;
 
class GFG {
 
    // Function to compute num (mod a)
    static int mod(String num, int a)
    {
 
        // Initialize result
        int res = 0;
 
        // One by one process all digits of 'num'
        for (int i = 0; i < num.length(); i++)
            res = (res * 10 + (int)num.charAt(i) - '0') % a;
 
        return res;
    }
 
    // Driver program
    public static void main(String[] args)
    {
 
        String num = "12316767678678";
 
        System.out.println(mod(num, 10));
    }
}
 
// This code is contributed by vt_m.

Python3

# program to compute mod of a big number
# represented as string
 
# Function to compute num (mod a)
 
 
def mod(num, a):
 
    # Initialize result
    res = 0
 
    # One by one process all digits
    # of 'num'
    for i in range(0, len(num)):
        res = (res * 10 + int(num[i])) % a
 
    return res
 
 
# Driver program
num = "12316767678678"
print(mod(num, 10))
 
# This code is contributed by Sam007

C#

// C# program to compute mod of a big
// number represented as string
using System;
 
public class GFG {
 
    // Function to compute num (mod a)
    static int mod(String num, int a)
    {
 
        // Initialize result
        int res = 0;
 
        // One by one process all
        // digits of 'num'
        for (int i = 0; i < num.Length; i++)
            res = (res * 10 + (int)num[i] - '0') % a;
 
        return res;
    }
 
    // Driver code
    public static void Main()
    {
        String num = "12316767678678";
 
        Console.WriteLine(mod(num, 10));
    }
}
 
// This code is contributed by Sam007

PHP

<?php
// PHP program to compute mod
// of a big number represented
// as string
 
// Function to compute num (mod a)
function mod($num, $a)
{
    // Initialize result
    $res = 0;
 
    // One by one process
    // all digits of 'num'
    for ($i = 0; $i < $r = strlen($num); $i++)
        $res = ($res * 10 +
                $num[$i] - '0') % $a;
 
    return $res;
}
 
// Driver Code
$num = "12316767678678";
echo mod($num, 10);
 
// This code is contributed by ajit
?>

Javascript

<script>
 
// Javascript program to compute mod
// of a big number represented
// as string
 
// Function to compute num (mod a)
function mod(num, a)
{
     
    // Initialize result
    let res = 0;
 
    // One by one process
    // all digits of 'num'
    for(let i = 0; i < num.length; i++)
        res = (res * 10 +
            parseInt(num[i])) % a;
 
    return res;
}
 
// Driver Code
let num = "12316767678678";
 
document.write(mod(num, 10));
 
// This code is contributed by _saurabh_jaiswal
 
</script>

Producción : 

8

Complejidad de tiempo : O(|num|)

  • La complejidad del tiempo se convertirá en el tamaño de la string num a medida que atravesamos una vez en num.

Espacio Auxiliar: O(1)

Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
 

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 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 *