class
GFG
{
static
final
int
MAXFACTORS =
1024
;
static
class
FACTORIZATION
{
int
size;
int
factor[] =
new
int
[MAXFACTORS +
1
];
int
exponent[] =
new
int
[MAXFACTORS +
1
];
}
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++;
n = n / i;
}
if
(c >
0
)
{
factorization.exponent[k] = c;
factorization.factor[k] = i;
k++;
}
}
factorization.size = k -
1
;
}
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( );
}
}
static
int
gcdMiddleSchoolProcedure(
int
m,
int
n)
{
FACTORIZATION mFactorization =
new
FACTORIZATION();
FACTORIZATION nFactorization =
new
FACTORIZATION();
int
r, mi, ni, i, k, x =
1
, j;
FindFactorization(m, mFactorization);
DisplayFactorization(m, mFactorization);
FindFactorization(n, nFactorization);
DisplayFactorization(n, nFactorization);
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
{
min = mFactorization.exponent[i] >
nFactorization.exponent[j] ?
nFactorization.exponent[j] :
mFactorization.exponent[i];
x = x * mFactorization.factor[i] * min;
i++;
j++;
}
}
return
x;
}
public
static
void
main(String args[])
{
int
m =
10
, n =
15
;
System.out.print(
"GCD("
+ m +
", "
+ n +
") = "
+
gcdMiddleSchoolProcedure(m, n));
}
}