import
java.util.*;
class
GFG{
static
String fractionToDecimal(
int
numerator,
int
denominator)
{
String res =
""
;
HashMap<Integer, Integer> mp =
new
HashMap<>();
int
rem = numerator % denominator;
while
((rem !=
0
) && !mp.containsKey(rem))
{
mp.put(rem, res.length());
rem = rem *
10
;
int
res_part = rem / denominator;
res += res_part +
""
;
rem = rem % denominator;
}
return
(rem ==
0
) ?
"-1"
: res.substring(mp.get(rem));
}
static
boolean
isPrime(
int
n)
{
for
(
int
i =
2
; i <= n /
2
; i++)
if
(n % i ==
0
)
return
false
;
return
true
;
}
static
void
ExtendedMidys(String str,
int
n,
int
m)
{
if
(!isPrime(n))
{
System.out.print(
"Denominator is not prime, "
+
"thus Extended Midy's theorem "
+
"is not applicable"
);
return
;
}
int
l = str.length();
int
part1 =
0
, part2 =
0
;
if
(l %
2
==
0
&& l % m ==
0
)
{
int
[]part =
new
int
[m];
int
sum =
0
, res =
0
;
for
(
int
i =
0
; i < l; i++)
{
int
var = i / m;
part[var] = part[var] *
10
+
(str.charAt(i) -
'0'
);
}
for
(
int
i =
0
; i < m; i++)
{
sum = sum + part[i];
System.out.print(part[i] +
" "
);
}
System.out.println();
res = (
int
)Math.pow(
10
, m) -
1
;
if
(sum % res ==
0
)
System.out.print(
"Extended Midy's "
+
"theorem holds!"
);
else
System.out.print(
"Extended Midy's "
+
"theorem doesn't hold!"
);
}
else
if
(l %
2
!=
0
)
{
System.out.print(
"The repeating decimal is of "
+
"odd length thus Extended Midy's "
+
"theorem is not applicable"
);
}
else
if
(l % m !=
0
)
{
System.out.print(
"The repeating decimal can "
+
"not be divided into m digits"
);
}
}
public
static
void
main(String []args)
{
int
numr =
1
, denr =
17
, m =
4
;
String res = fractionToDecimal(numr, denr);
if
(res ==
"-1"
)
System.out.print(
"The fraction does not "
+
"have repeating decimal"
);
else
{
System.out.println(
"Repeating decimal = "
+ res);
ExtendedMidys(res, denr, m);
}
}
}