Comprobar si un número grande es divisible por 53 o no

Dado un gran número en forma de string N , la tarea es verificar si el número es divisible por 53 o no. Ejemplos:

Entrada: N = 5299947 Salida:Entrada: N = 54 Salida: No

Acercarse:

  • Extraiga el último dígito de la string N dada y elimínelo.
  • Multiplica ese dígito por 37.
  • Reste el producto calculado en el paso anterior del número restante.
  • Continúe hasta que reduzcamos la string dada a un número de 3 o cuatro dígitos.
  • Convierta la string restante a su forma entera correspondiente y verifique si es divisible por 53 o no.

A continuación se muestra la implementación del enfoque anterior: 

C++

// C++ program to check
// whether a number
// is divisible by 53 or not
#include <bits/stdc++.h>
using namespace std;
 
// Function to check if the
// number is divisible by 53 or not
bool isDivisible(string s)
{
    int flag = 0;
    while (s.size() > 4) {
 
        int l = s.size() - 1;
        int x = (s[l] - '0') * 37;
 
        reverse(s.begin(), s.end());
        s.erase(0, 1);
 
        int i = 0, carry = 0;
        while (x) {
            int d = (s[i] - '0')
                    - (x % 10)
                    - carry;
            if (d < 0) {
                d += 10;
                carry = 1;
            }
            else
                carry = 0;
 
            s[i] = (char)(d + '0');
            x /= 10;
            i++;
        }
 
        while (carry && i < l) {
            int d = (s[i] - '0') - carry;
            if (d < 0) {
                d += 10;
                carry = 1;
            }
            else
                carry = 0;
 
            s[i] = (char)(d + '0');
 
            i++;
        }
 
        reverse(s.begin(), s.end());
    }
 
    int num = 0;
    for (int i = 0; i < s.size(); i++) {
        num = num * 10 + (s[i] - '0');
    }
 
    if (num % 53 == 0)
        return true;
    else
        return false;
}
 
// Driver Code
int main()
{
    string N = "18432462191076";
 
    if (isDivisible(N))
        cout << "Yes" << endl;
    else
        cout << "No" << endl;
 
    return 0;
}

Java

// Java program to check whether
// a number is divisible by 53 or not
import java.util.*;
 
class GFG{
 
// Function to check if the
// number is divisible by 53 or not
static boolean isDivisible(char []s)
{
    while (s.length > 4)
    {
        int l = s.length - 1;
        int x = (s[l] - '0') * 37;
 
        s = reverse(s);
        s = Arrays.copyOfRange(s, 1, s.length);
 
        int i = 0, carry = 0;
        while (x > 0)
        {
            int d = (s[i] - '0') -
                        (x % 10) -
                        carry;
                     
            if (d < 0)
            {
                d += 10;
                carry = 1;
            }
            else
                carry = 0;
 
            s[i] = (char)(d + '0');
            x /= 10;
            i++;
        }
 
        while (carry > 0 && i < l)
        {
            int d = (s[i] - '0') - carry;
            if (d < 0)
            {
                d += 10;
                carry = 1;
            }
            else
                carry = 0;
 
            s[i] = (char)(d + '0');
            i++;
        }
        s = reverse(s);
    }
 
    int num = 0;
    for(int i = 0; i < s.length; i++)
    {
       num = num * 10 + (s[i] - '0');
    }
 
    if (num % 53 == 0)
        return true;
    else
        return false;
}
 
static char[] reverse(char []a)
{
    int l, r = a.length - 1;
     
    for(l = 0; l < r; l++, r--)
    {
       char temp = a[l];
            a[l] = a[r];
            a[r] = temp;
    }
    return a;
}
 
// Driver Code
public static void main(String[] args)
{
    String N = "18432462191076";
 
    if (isDivisible(N.toCharArray()))
        System.out.print("Yes" + "\n");
    else
        System.out.print("No" + "\n");
}
}
 
// This code is contributed by Rohit_ranjan

Python3

# Python3 program to check whether a 
# number is divisible by 53 or not
 
# Function to check if the
# number is divisible by 53 or not
def isDivisible(s):
     
    flag = 0
     
    while (len(s) > 4):
        l = len(s) - 1
        x = (ord(s[l]) - ord('0')) * 37
 
        s = s[::-1]
        s = s.replace('0', '', 1)
 
        i = 0
        carry = 0
         
        while (x):
            d = ((ord(s[i]) - ord('0')) -
                 (x % 10) - carry)
            if (d < 0):
                d += 10
                carry = 1
            else:
                carry = 0
                 
            s = s.replace(s[i], chr(d + ord('0')), 1)
            x //= 10
            i += 1
 
        while (carry and i < l):
            d = (ord(s[i]) - ord('0')) - carry
             
            if (d < 0):
                d += 10
                carry = 1
            else:
                carry = 0
             
            s = s.replace(s[i], chr(d + ord('0')), 1)
            i += 1
        s = s[::-1]
 
    num = 0
    for i in range(len(s)):
        num = num * 10 + (ord(s[i]) - ord('0'))
 
    if (num % 53 == 0):
        return True
    else:
        return False
 
# Driver Code
if __name__ == '__main__':
     
    N = "1843246219106"
 
    if (isDivisible(N)):
        print("No")
    else:
        print("Yes")
 
# This code is contributed by Surendra_Gangwar

C#

// C# program to check whether 
// a number is divisible by 53 or not
using System;
using System.Collections;
using System.Collections.Generic;
 
class GFG{
     
// Function to check if the
// number is divisible by 53 or not
static bool isDivisible(char []s)
{
    while (s.Length > 4)
    {
        int l = s.Length - 1;
        int x = (s[l] - '0') * 37;
 
        s = reverse(s);
         
        char []tmp = new char[s.Length - 1];
         
        Array.Copy(s, 1, tmp, 0, s.Length - 1);
        s = tmp;
         
        int i = 0, carry = 0;
        while (x > 0)
        {
            int d = (s[i] - '0') -
                       (x % 10) - carry;
                        
            if (d < 0)
            {
                d += 10;
                carry = 1;
            }
            else
                carry = 0;
 
            s[i] = (char)(d + '0');
            x /= 10;
            i++;
        }
 
        while (carry > 0 && i < l)
        {
            int d = (s[i] - '0') - carry;
            if (d < 0)
            {
                d += 10;
                carry = 1;
            }
            else
                carry = 0;
 
            s[i] = (char)(d + '0');
            i++;
        }
        s = reverse(s);
    }
 
    int num = 0;
    for(int i = 0; i < s.Length; i++)
    {
        num = num * 10 + (s[i] - '0');
    }
 
    if (num % 53 == 0)
        return true;
    else
        return false;
}
 
static char[] reverse(char []a)
{
    int l, r = a.Length - 1;
     
    for(l = 0; l < r; l++, r--)
    {
        char temp = a[l];
             a[l] = a[r];
             a[r] = temp;
    }
    return a;
}
 
// Driver Code
public static void Main(string[] args)
{
    string N = "18432462191076";
 
    if (isDivisible(N.ToCharArray()))
        Console.Write("Yes" + "\n");
    else
        Console.Write("No" + "\n");
}
}
 
// This code is contributed by rutvik_56

Javascript

// JavaScript program to check
// whether a number
// is divisible by 53 or not
 
 
// Function to check if the
// number is divisible by 53 or not
function isDivisible(s)
{
    s = Array.from(s);
    let flag = 0;
    while (s.length > 4) {
 
        let l = s.length - 1;
        let x = parseInt(s[l]) * 37;
 
         
        s.reverse();
        s.shift();
 
        let i = 0, carry = 0;
        while (x > 0) {
            let d = (parseInt(s[i]))
                    - (x % 10)
                    - carry;
            if (d < 0) {
                d += 10;
                carry = 1;
            }
            else
                carry = 0;
             
            s[i] = d.toString();
            x = Math.floor(x / 10);
            i++;
        }
        while ((carry > 0) && i < l) {
            let d = parseInt(s[i]) - carry;
            if (d < 0) {
                d += 10;
                carry = 1;
            }
            else
                carry = 0;
            s[i] = d.toString();
 
            i++;
        }
         
        s.reverse();
    }
 
    let num = parseInt((s).join(""));
 
    if (num % 53 == 0)
        return true;
    else
        return false;
}
 
 
// Driver Code
let N = "18432462191076";
 
if (isDivisible(N))
    console.log("Yes");
else
    console.log("No");
 
 
// This code is contributed by phasing17
Producción:

Yes

Complejidad de tiempo: O(n), donde n es el tamaño de la string dada N
Espacio auxiliar: O(1), ya que no se requiere espacio adicional

Publicación traducida automáticamente

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