Divisible por 37 para números grandes

Dado un gran número n, necesitamos comprobar si es divisible por 37. Imprime verdadero si es divisible por 37, de lo contrario es falso.
Ejemplos: 
 

Input  : 74
Output : True

Input : 73
Output : False

Input : 8955795758 (10 digit number)
Output : True

Un número m de r dígitos cuya forma digital es (ar-1 ar-2….a2 a1 a0) es divisible por 37 si y solo si la suma de la serie de números (a2 a1 a0) + (a5 a4 a3) + (a8 a7 a6) + … es divisible por 37. Los tripletes de dígitos entre paréntesis representan un número de 3 dígitos en forma digital.
 

El número dado n se puede escribir como una suma de potencias de 1000 de la siguiente manera. 
n = (a2 a1 a0) + (a5 a4 a3)*1000 + (a8 a7 a6)*(1000*1000) +…. 
Como 1000 = (1)(mod 37), 1000 según relación de congruencia. 
Para un entero positivo n, se dice que dos números a y b son congruentes módulo n, si su diferencia 
(a – b) es un múltiplo entero de n (es decir, si hay un entero k tal que a – b = kn ). Esta relación de congruencia normalmente se considera cuando a y b son números enteros, y se denota
{\displaystyle a\equiv b{\pmod {m}}\,}
. Por lo tanto, podemos escribir: 
n = { (a2a1a0) + (a5a4a3)* (1) + (a8a7a6)* (1)*(1)+…. .}(mod 37), 
Por lo tanto, n es divisible por 37 si y solo si la serie es divisible por 37.

Ejemplos: 
 

Input : 8955795758 (10 digit number)
Output : True
Explanation:
     We express the number in terms of 
     triplets of digits as follows.
     (008)(955)(795)(758)
     Now, 758 + 795 + 955 + 8 = 2516
     For 2516, the triplets will be:
     (002)(516)
     Now 516 + 2 = 518 which is divisible 
     by 37. Hence the number is divisible 
     by 37.

Input : 189710809179199 (15 digit number)
Output : False

Un método simple y eficiente es tomar la entrada en forma de string (haga su longitud en forma de 3*m agregando 0 a la izquierda del número si es necesario) y luego debe agregar los dígitos en bloques de tres de derecha a izquierda hasta se convierte en un número de 3 dígitos para formar una serie. Calcular la suma de la serie. Si la suma de la serie tiene más de 3 dígitos, nuevamente llama recursivamente a esta función. 
Finalmente comprueba si la suma resultante es divisible por 37 o no.
Aquí está la implementación del programa para verificar la divisibilidad por 37.
 

C++

// CPP program for checking divisibility by 37
// function divisible37 which returns True if
// number is divisible by 37 otherwise False
#include <bits/stdc++.h>
using namespace std;
 
int divisibleby37(string n){
    int l = n.length();
    if (n == "0")
        return 0;
 
    // Append required 0's at the beginning
    if (l % 3 == 1){
        n = "00"+ n;
        l += 2;
    }
    else if (l % 3 == 2){
        n = "0"+ n;
        l += 1;
    }
     
    int gSum = 0;
     
    while (l != 0){
 
    // group saves 3-digit group
    string group = n.substr(l - 3, l);
        l = l - 3;
    int gvalue = (group[0] - '0') * 100 +
                 (group[1] - '0') * 10 +
                 (group[2] - '0') * 1;
                  
    // add the series
    gSum = gSum + gvalue;
    }
     
    // if sum of series gSum has minimum 4
    // digits in it, then again recursive
    // call divisibleby37 function
    if (gSum >= 1000)
        return (divisibleby37(to_string(gSum)));
    else
        return (gSum % 37 == 0);
 
}
 
// drive program to test the above function
int main(){
 
    string s="8955795758";
     
    if (divisibleby37(s))
    cout<<"True";
    else
    cout<<"False";
    return 0;
}
// This code is contributed by Prerna Saini

Java

// Java program for checking
// divisibility by 37
 
class GFG
{
// function divisible37 which
// returns True if number is
// divisible by 37 otherwise False
static int divisibleby37(String n1)
{
    int l = n1.length();
    if (n1 == "0")
        return 0;
 
    // Append required 0's
    // at the beginning
    if (l % 3 == 1)
    {
        n1 = "00"+ n1;
        l += 2;
    }
    else if (l % 3 == 2)
    {
        n1 = "0"+ n1;
        l += 1;
    }
    char[]  n= n1.toCharArray();
    int gSum = 0;
    while (l != 0)
    {
 
    // group saves 3-digit group
    int gvalue;
    if(l == 2)
        gvalue = ((int)n[(l - 2)] - 48) * 100 +
                ((int)n[(l - 1)] - 48) * 10;
    else if(l == 1)
        gvalue = ((int)n[(l - 1)] - 48) * 100;
    else
        gvalue = ((int)n[(l - 3)] - 48) * 100 +
                ((int)n[(l - 2)] - 48) * 10 +
                ((int)n[(l - 1)] - 48) * 1;
    l = l - 3;
     
    // add the series
    gSum = gSum + gvalue;
    }
     
    // if sum of series gSum has minimum 4
    // digits in it, then again recursive
    // call divisibleby37 function
    if (gSum >= 1000)
        return (divisibleby37(String.valueOf(gSum)));
    else
        return (gSum % 37 == 0) ? 1 : 0;
 
}
 
// Driver Code
public static void main(String[] args)
{
    String s="8955795758";
     
    if (divisibleby37(s) == 1)
    System.out.println("True");
    else
    System.out.println("False");
}
}
 
// This code is contributed by mits

Python3

# Python code for checking divisibility by 37
# function divisible37 which returns True if
# number is divisible by 37 otherwise False
def divisibleby37(n):
    l = len(n)
    if (n == 0):
        return True
   
    # Append required 0's at the beginning
    if (l%3 == 1):
        n = "00"+ n
        l += 2
    elif (l%3 == 2):
        n = "0"+ n
        l += 1
 
    gSum = 0
    while (l != 0):
 
        # group saves 3-digit group
        group = int(n[l-3:l])
        l = l-3
 
        # add the series
        gSum = gSum + group
 
    # if sum of series gSum has minimum 4
    # digits in it, then again recursive
    # call divisibleby37 function
    if (gSum >= 1000):
        return(divisibleby37(str(gSum)))
    else:
        return (gSum%37==0)
 
# Driver method to test the above function
print(divisibleby37("8955795758"))

C#

// C# program for checking
// divisibility by 37
using System;
 
class GFG
{
// function divisible37 which
// returns True if number is
// divisible by 37 otherwise False
static int divisibleby37(string n)
{
    int l = n.Length;
    if (n == "0")
        return 0;
 
    // Append required 0's
    // at the beginning
    if (l % 3 == 1)
    {
        n = "00"+ n;
        l += 2;
    }
    else if (l % 3 == 2)
    {
        n = "0"+ n;
        l += 1;
    }
     
    int gSum = 0;
    while (l != 0)
    {
 
    // group saves 3-digit group
    int gvalue;
    if(l == 2)
        gvalue = ((int)n[(l - 2)] - 48) * 100 +
                 ((int)n[(l - 1)] - 48) * 10;
    else if(l == 1)
        gvalue = ((int)n[(l - 1)] - 48) * 100;
    else
        gvalue = ((int)n[(l - 3)] - 48) * 100 +
                 ((int)n[(l - 2)] - 48) * 10 +
                 ((int)n[(l - 1)] - 48) * 1;
    l = l - 3;
     
    // add the series
    gSum = gSum + gvalue;
    }
     
    // if sum of series gSum has minimum 4
    // digits in it, then again recursive
    // call divisibleby37 function
    if (gSum >= 1000)
        return (divisibleby37(gSum.ToString()));
    else
        return (gSum % 37 == 0) ? 1 : 0;
 
}
 
// Driver Code
public static void Main()
{
    string s="8955795758";
     
    if (divisibleby37(s) == 1)
    Console.WriteLine("True");
    else
    Console.WriteLine("False");
}
}
 
// This code is contributed by mits

PHP

<?php
// PHP program for checking
// divisibility by 37
 
// function divisible37 which
// returns True if number is
// divisible by 37 otherwise
// False
function divisibleby37($n)
{
    $l = strlen($n);
    if ($n == '0')
        return 0;
 
    // Append required 0's
    // at the beginning
    if ($l % 3 == 1)
    {
        $n = "00" . $n;
        $l += 2;
    }
    else if ($l % 3 == 2)
    {
        $n = "0" . $n;
        $l += 1;
    }
     
    $gSum = 0;
     
    while ($l != 0)
    {
 
    // group saves 3-digit group
    $group = substr($n,$l - 3, $l);
        $l = $l - 3;
    $gvalue = (ord($group[0]) - 48) * 100 +
              (ord($group[1]) - 48) * 10 +
              (ord($group[2]) - 48) * 1;
                 
    // add the series
    $gSum = $gSum + $gvalue;
    }
     
    // if sum of series gSum has
    // minimum 4 digits in it,
    // then again recursive call
    // divisibleby37 function
    if ($gSum >= 1000)
        return (divisibleby37((string)($gSum)));
    else
        return ($gSum % 37 == 0);
 
}
 
// Driver code
$s = "8955795758";
 
if (divisibleby37($s))
echo "True";
else
echo "False";
 
// This code is contributed
// by mits
?>

Javascript

<script>
// Javascript program for checking
// divisibility by 37
 
// function divisible37 which
// returns True if number is
// divisible by 37 otherwise
// False
function divisibleby37(n)
{
    let l = n.length;
    if (n == '0')
        return 0;
 
    // Append required 0's
    // at the beginning
    if (l % 3 == 1)
    {
        n = "00" + n;
        l += 2;
    }
    else if (l % 3 == 2)
    {
        n = "0" + n;
        l += 1;
    }
     
    let gSum = 0;
     
    while (l != 0)
    {
 
    // group saves 3-digit group
    let group = n.substr(l - 3, l);
        l = l - 3;
    gvalue = (group.charCodeAt(0) - 48) * 100 +
             (group.charCodeAt(1) - 48) * 10 +
             (group.charCodeAt(2) - 48) * 1;
                 
    // add the series
    gSum = gSum + gvalue;
    }
     
    // if sum of series gSum has
    // minimum 4 digits in it,
    // then again recursive call
    // divisibleby37 function
    if (gSum >= 1000)
        return (divisibleby37(`${gSum}`));
    else
        return (gSum % 37 == 0);
 
}
 
// Driver code
let s = "8955795758";
 
if (divisibleby37(s))
    document.write("True");
else
    document.write("False");
 
// This code is contributed
// by _saurabh_jaiswal.
</script>
Producción

True

Complejidad de tiempo: O(n), donde n es la longitud de la string.

Espacio Auxiliar: O(1)

Método: Comprobación de que el número dado es divisible por 37 o no utilizando el operador de división de módulo «%».

C++

// C++ code To check whether the given number is divisible
// by 37 or not
 
#include <iostream>
using namespace std;
 
int main()
{
 
    // input number
    int num = 8955;
    // checking if the given number is divisible by 37 or
    // not using modulo division operator if the output of
    // num%37 is equal to 0 then given number is divisible
    // by 37 otherwise not divisible by 37
    if (num % 37 == 0) {
        cout << " divisible";
    }
    else {
        cout << " not divisible";
    }
    return 0;
}

Java

// Java code To check whether the given number is divisible
// by 37 or not
import java.util.*;
 
class GFG
{
  public static void main(String[] args)
  {
 
    // input number
    int num = 8955;
 
    // checking if the given number is divisible by 37 or
    // not using modulo division operator if the output of
    // num%37 is equal to 0 then given number is divisible
    // by 37 otherwise not divisible by 37
    if (num % 37 == 0) {
      System.out.println(" divisible");
    }
    else {
      System.out.println(" not divisible");
    }
  }
}
 
// This code is contributed by phasing17

Python3

# Python code
# To check whether the given number is divisible by 37 or not
 
#input
n=8955795758
# the above input can also be given as n=input() -> taking input from user
# finding given number is divisible by 37 or not
if int(n)%37==0:
  print("true")
else:
  print("false")
   
  # this code is contributed by gangarajula laxmi

C#

using System;
 
public class GFG {
 
    static public void Main()
    {
 
        // input number
        long num = 8955795758;
 
    // checking if the given number is divisible by 37 or
    // not using modulo division operator if the output of
    // num%37 is equal to 0 then given number is divisible
    // by 37 otherwise not divisible by 37
        if (num % 37 == 0) {
            Console.Write("Yes");
        }
        else {
            Console.Write("No");
        }
    }
}
 
// This code is contributed by laxmigangarajula03

Javascript

<script>
        // JavaScript code for the above approach
        // To check whether the given number is divisible by 37 or not
  
        // input
        var n = 8955795758
         
        // finding given number is divisible by 37 or not
        if (n % 37 == 0)
            document.write("true")
        else
            document.write("false")
  
 // This code is contributed by laxmigangarajula03
    </script>
Producción

true

Este artículo es una contribución de Sruti Rai . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
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 *