Programa para encontrar MCD o HCF de dos números usando el Procedimiento de la escuela secundaria

Dados dos enteros positivos M y N, la tarea es encontrar el máximo común divisor (MCD) utilizando el Procedimiento de la escuela intermedia. 
Nota: MCD de dos enteros es el entero positivo más grande que divide a ambos enteros. 
Ejemplos: 
 

Input: m = 12, n = 14
Output: 2
Prime factor of 12 =  1*2*2*3
Prime factor of 14 = 1*2*7
GCD(12, 14) = 2

Input: m = 5, n = 10
Output: 5
Prime factor of 10 = 1*2*5
Prime factor of 5 = 1*5
GCD(5, 10) = 5

El algoritmo para encontrar GCD usando el procedimiento de Middle School GCD(m, n): 
 

  1. Encuentre la descomposición en factores primos de m.
  2. Encuentre la descomposición en factores primos de n.
  3. Encuentra todos los factores primos comunes.
  4. Calcule el producto de todos los factores primos comunes y devuélvalo como mcd(m, n).

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

C++

// C++ implementation of above algorithm
#include <bits/stdc++.h>
#define MAXFACTORS 1024
using namespace std;
 
// struct to store factorization of m and n
typedef struct
{
 
    int size;
    int factor[MAXFACTORS + 1];
    int exponent[MAXFACTORS + 1];
 
} FACTORIZATION;
 
// Function to find the factorization of M and N
void FindFactorization(int x, FACTORIZATION* factorization)
{
    int i, j = 1;
    int n = x, c = 0;
    int k = 1;
    factorization->factor[0] = 1;
    factorization->exponent[0] = 1;
 
    for (i = 2; i <= n; i++) {
        c = 0;
 
        while (n % i == 0) {
            c++;
 
            // factorization->factor[j]=i;
            n = n / i;
            // j++;
        }
 
        if (c > 0) {
            factorization->exponent[k] = c;
            factorization->factor[k] = i;
            k++;
        }
    }
 
    factorization->size = k - 1;
}
 
// Function to print the factors
void DisplayFactorization(int x, FACTORIZATION factorization)
{
 
    int i;
    cout << "Prime factor of << x << = ";
 
    for (i = 0; i <= factorization.size; i++) {
 
        cout << factorization.factor[i];
 
        if (factorization.exponent[i] > 1)
            cout << "^" << factorization.exponent[i];
 
        if (i < factorization.size)
            cout << "*";
 
        else
            cout << "\n";
    }
}
 
// function to find the gcd using Middle School procedure
int gcdMiddleSchoolProcedure(int m, int n)
{
 
    FACTORIZATION mFactorization, nFactorization;
 
    int r, mi, ni, i, k, x = 1, j;
 
    // Step 1.
    FindFactorization(m, &mFactorization);
    DisplayFactorization(m, mFactorization);
 
    // Step 2.
    FindFactorization(n, &nFactorization);
    DisplayFactorization(n, nFactorization);
 
    // Steps 3 and 4.
    // Procedure algorithm for computing the
    // greatest common divisor.
    int min;
    i = 1;
    j = 1;
    while (i <= mFactorization.size && j <= nFactorization.size) {
        if (mFactorization.factor[i] < nFactorization.factor[j])
            i++;
 
        else if (nFactorization.factor[j] < mFactorization.factor[i])
            j++;
 
        else /* if arr1[i] == arr2[j] */
        {
            min = mFactorization.exponent[i] > nFactorization.exponent[j]
                      ? nFactorization.exponent[j]
                      : mFactorization.exponent[i];
 
            x = x * mFactorization.factor[i] * min;
            i++;
            j++;
        }
    }
 
    return x;
}
 
// Driver code
int main()
 
{
 
    int m = 10, n = 15;
    cout << "GCD(" << m << ", " << n << ") = "
         << gcdMiddleSchoolProcedure(m, n);
 
    return (0);
}

Java

// Java implementation of above algorithm
class GFG
{
static final int MAXFACTORS = 1024 ;
 
// class to store factorization
// of m and n
static class FACTORIZATION
{
    int size;
    int factor[] = new int[MAXFACTORS + 1];
    int exponent[] = new int[MAXFACTORS + 1];
 
}
 
// Function to find the
// factorization of M and N
static void FindFactorization(int x, FACTORIZATION
                                     factorization)
{
    int i, j = 1;
    int n = x, c = 0;
    int k = 1;
    factorization.factor[0] = 1;
    factorization.exponent[0] = 1;
 
    for (i = 2; i <= n; i++)
    {
        c = 0;
 
        while (n % i == 0)
        {
            c++;
 
            // factorization.factor[j]=i;
            n = n / i;
            // j++;
        }
 
        if (c > 0)
        {
            factorization.exponent[k] = c;
            factorization.factor[k] = i;
            k++;
        }
    }
 
    factorization.size = k - 1;
}
 
// Function to print the factors
static void DisplayFactorization(int x, FACTORIZATION
                                        factorization)
{
    int i;
    System.out.print("Prime factor of " + x + " = ");
 
    for (i = 0;
         i <= factorization.size; i++)
    {
 
        System.out.print(factorization.factor[i]);
 
        if (factorization.exponent[i] > 1)
            System.out.print( "^" +
                       factorization.exponent[i]);
 
        if (i < factorization.size)
            System.out.print("*");
 
        else
            System.out.println( );
    }
}
 
// function to find the gcd
// using Middle School procedure
static int gcdMiddleSchoolProcedure(int m, int n)
{
 
    FACTORIZATION mFactorization = new FACTORIZATION();
    FACTORIZATION nFactorization = new FACTORIZATION();
 
    int r, mi, ni, i, k, x = 1, j;
 
    // Step 1.
    FindFactorization(m, mFactorization);
    DisplayFactorization(m, mFactorization);
 
    // Step 2.
    FindFactorization(n, nFactorization);
    DisplayFactorization(n, nFactorization);
 
    // Steps 3 and 4.
    // Procedure algorithm for computing the
    // greatest common divisor.
    int min;
    i = 1;
    j = 1;
    while (i <= mFactorization.size &&
           j <= nFactorization.size)
    {
        if (mFactorization.factor[i] <
            nFactorization.factor[j])
            i++;
 
        else if (nFactorization.factor[j] <
                 mFactorization.factor[i])
            j++;
 
        else /* if arr1[i] == arr2[j] */
        {
            min = mFactorization.exponent[i] >
                  nFactorization.exponent[j] ?
                  nFactorization.exponent[j] :
                  mFactorization.exponent[i];
 
            x = x * mFactorization.factor[i] * min;
            i++;
            j++;
        }
    }
 
    return x;
}
 
// Driver code
public static void main(String args[])
{
    int m = 10, n = 15;
    System.out.print("GCD(" + m + ", " + n + ") = " +
                     gcdMiddleSchoolProcedure(m, n));
}
}
 
// This code is contributed by Arnab Kundu

Python3

# Python3 implementation of above algorithm
 
MAXFACTORS = 1024
 
# class to store factorization
# of m and n
class FACTORIZATION:
    def __init__(self):
        self.size = 0
        self.factor = [0]*(MAXFACTORS + 1)
        self.exponent = [0]*(MAXFACTORS + 1)
 
# Function to find the
# factorization of M and N
def FindFactorization(x,factorization):
    j = 1
    n, c = x, 0
    k = 1
    factorization.factor[0] = 1
    factorization.exponent[0] = 1
    
    for i in range(2, n + 1):
        c = 0
        while (n % i == 0):
            c+=1
            # factorization.factor[j]=i;
            n = n / i
            # j++
    
        if (c > 0):
            factorization.exponent[k] = c
            factorization.factor[k] = i
            k+=1
    
    factorization.size = k - 1
 
# Function to print the factors
def DisplayFactorization(x,factorization):
    print("Prime factor of", x, "= ", end="")
    
    for i in range(factorization.size + 1):
        print(factorization.factor[i], end = "")
    
        if (factorization.exponent[i] > 1):
            print( "^", factorization.exponent[i], sep = "", end = "")
    
        if (i < factorization.size):
            print("*", end = "")
        else:
            print()
  
# function to find the gcd
# using Middle School procedure
def gcdMiddleSchoolProcedure(m,n):
    mFactorization = FACTORIZATION()
    nFactorization = FACTORIZATION()
    
    x = 1
    
    # Step 1.
    FindFactorization(m, mFactorization)
    DisplayFactorization(m, mFactorization)
    
    # Step 2.
    FindFactorization(n, nFactorization)
    DisplayFactorization(n, nFactorization)
    
    # Steps 3 and 4.
    # Procedure algorithm for computing the
    # greatest common divisor.
    i = 1
    j = 1
    while (i <= mFactorization.size and j <= nFactorization.size):
        if (mFactorization.factor[i] < nFactorization.factor[j]):
            i+=1
    
        elif (nFactorization.factor[j] < mFactorization.factor[i]):
            j+=1
    
        else: # if arr1[i] == arr2[j]
            if mFactorization.exponent[i] > nFactorization.exponent[j]:
                Min = nFactorization.exponent[j]
            else:
                Min = mFactorization.exponent[i]
   
            x = x * mFactorization.factor[i] * Min
            i+=1
            j+=1
    return x
 
# Driver code
m, n = 10, 15
print("GCD(", m, ", ", n, ") = ", gcdMiddleSchoolProcedure(m, n), sep = "")
 
# This code is contributed by suresh07.

C#

// C# implementation of above algorithm
using System;
     
public class GFG
{
static readonly int MAXFACTORS = 1024 ;
 
// class to store factorization
// of m and n
public class FACTORIZATION
{
    public int size;
    public int []factor = new int[MAXFACTORS + 1];
    public int []exponent = new int[MAXFACTORS + 1];
 
}
 
// Function to find the
// factorization of M and N
static void FindFactorization(int x, FACTORIZATION
                                    factorization)
{
    int i;
    int n = x, c = 0;
    int k = 1;
    factorization.factor[0] = 1;
    factorization.exponent[0] = 1;
 
    for (i = 2; i <= n; i++)
    {
        c = 0;
 
        while (n % i == 0)
        {
            c++;
 
            // factorization.factor[j]=i;
            n = n / i;
            // j++;
        }
 
        if (c > 0)
        {
            factorization.exponent[k] = c;
            factorization.factor[k] = i;
            k++;
        }
    }
 
    factorization.size = k - 1;
}
 
// Function to print the factors
static void DisplayFactorization(int x, FACTORIZATION
                                        factorization)
{
    int i;
    Console.Write("Prime factor of " + x + " = ");
 
    for (i = 0;
        i <= factorization.size; i++)
    {
 
        Console.Write(factorization.factor[i]);
 
        if (factorization.exponent[i] > 1)
            Console.Write( "^" +
                    factorization.exponent[i]);
 
        if (i < factorization.size)
            Console.Write("*");
 
        else
        Console.WriteLine();
    }
}
 
// function to find the gcd
// using Middle School procedure
static int gcdMiddleSchoolProcedure(int m, int n)
{
 
    FACTORIZATION mFactorization = new FACTORIZATION();
    FACTORIZATION nFactorization = new FACTORIZATION();
 
    int i, x = 1, j;
 
    // Step 1.
    FindFactorization(m, mFactorization);
    DisplayFactorization(m, mFactorization);
 
    // Step 2.
    FindFactorization(n, nFactorization);
    DisplayFactorization(n, nFactorization);
 
    // Steps 3 and 4.
    // Procedure algorithm for computing the
    // greatest common divisor.
    int min;
    i = 1;
    j = 1;
    while (i <= mFactorization.size &&
        j <= nFactorization.size)
    {
        if (mFactorization.factor[i] <
            nFactorization.factor[j])
            i++;
 
        else if (nFactorization.factor[j] <
                mFactorization.factor[i])
            j++;
 
        else /* if arr1[i] == arr2[j] */
        {
            min = mFactorization.exponent[i] >
                nFactorization.exponent[j] ?
                nFactorization.exponent[j] :
                mFactorization.exponent[i];
 
            x = x * mFactorization.factor[i] * min;
            i++;
            j++;
        }
    }
 
    return x;
}
 
// Driver code
public static void Main(String []args)
{
    int m = 10, n = 15;
    Console.Write("GCD(" + m + ", " + n + ") = " +
                    gcdMiddleSchoolProcedure(m, n));
}
}
 
// This code contribut by Rajput-Ji

Javascript

<script>
 
// JavaScript implementation of above algorithm
 
let MAXFACTORS = 1024 ;
 
// class to store factorization
// of m and n
class FACTORIZATION
{
    constructor()
    {
        this.size=0;;
        this.factor = new Array(MAXFACTORS + 1);
        this.exponent = new Array(MAXFACTORS + 1);
    }
}
 
// Function to find the
// factorization of M and N
function FindFactorization(x,factorization)
{
    let i, j = 1;
    let n = x, c = 0;
    let k = 1;
    factorization.factor[0] = 1;
    factorization.exponent[0] = 1;
   
    for (i = 2; i <= n; i++)
    {
        c = 0;
   
        while (n % i == 0)
        {
            c++;
   
            // factorization.factor[j]=i;
            n = n / i;
            // j++;
        }
   
        if (c > 0)
        {
            factorization.exponent[k] = c;
            factorization.factor[k] = i;
            k++;
        }
    }
   
    factorization.size = k - 1;
}
// Function to print the factors
function DisplayFactorization(x,factorization)
{
    let i;
    document.write("Prime factor of " + x + " = ");
   
    for (i = 0;
         i <= factorization.size; i++)
    {
   
        document.write(factorization.factor[i]);
   
        if (factorization.exponent[i] > 1)
            document.write( "^" +
                       factorization.exponent[i]);
   
        if (i < factorization.size)
            document.write("*");
   
        else
            document.write("<br>" );
    }
}
 
// function to find the gcd
// using Middle School procedure
function gcdMiddleSchoolProcedure(m,n)
{
    let mFactorization = new FACTORIZATION();
    let nFactorization = new FACTORIZATION();
   
    let r, mi, ni, i, k, x = 1, j;
   
    // Step 1.
    FindFactorization(m, mFactorization);
    DisplayFactorization(m, mFactorization);
   
    // Step 2.
    FindFactorization(n, nFactorization);
    DisplayFactorization(n, nFactorization);
   
    // Steps 3 and 4.
    // Procedure algorithm for computing the
    // greatest common divisor.
    let min;
    i = 1;
    j = 1;
    while (i <= mFactorization.size &&
           j <= nFactorization.size)
    {
        if (mFactorization.factor[i] <
            nFactorization.factor[j])
            i++;
   
        else if (nFactorization.factor[j] <
                 mFactorization.factor[i])
            j++;
   
        else /* if arr1[i] == arr2[j] */
        {
            min = mFactorization.exponent[i] >
                  nFactorization.exponent[j] ?
                  nFactorization.exponent[j] :
                  mFactorization.exponent[i];
   
            x = x * mFactorization.factor[i] * min;
            i++;
            j++;
        }
    }
   
    return x;
}
 
// Driver code
let m = 10, n = 15;
document.write("GCD(" + m + ", " + n + ") = " +
                     gcdMiddleSchoolProcedure(m, n));
 
 
// This code is contributed by avanitrachhadiya2155
 
</script>
Producción: 

Prime factor of 10 = 1*2*5
Prime factor of 15 = 1*3*5
GCD(10, 15) = 5

 

Publicación traducida automáticamente

Artículo escrito por Kamal Deep Garg 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 *