使用中学程序查找两个数字的GCD或HCF的程序

给定两个正整数M和N,任务是找到 最大公约数(GCD) 使用中学程序。 注: 两个整数的GCD是除以两个整数的最大正整数。 例如:

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

使用中学程序GCD(m,n)查找GCD的算法:

  1. 求m的素因式分解。
  2. 求n的素因式分解。
  3. 找出所有共同的素因子。
  4. 计算所有公共素数因子的乘积,并将其作为gcd(m,n)返回。

下面是上述算法的实现:

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 << "" ;
}
}
// 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>


输出:

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

© 版权声明
THE END
喜欢就支持一下吧
点赞8 分享