|
4 | 4 | // Problem Link: https://en.wikipedia.org/wiki/Greedy_algorithm_for_Egyptian_fractions |
5 | 5 |
|
6 | 6 | public class EgyptianFraction { |
7 | | - // Function to decompose a fraction into a sum of unit fractions |
8 | | - public static List<String> getEgyptianFraction(int numerator, int denominator) { |
9 | | - List<String> result = new ArrayList<>(); |
| 7 | + |
| 8 | + public List<String> getEgyptianFraction(int numerator, int denominator) { |
| 9 | + List<String> fractions = new ArrayList<>(); |
10 | 10 |
|
| 11 | + // Loop until the numerator becomes zero |
11 | 12 | while (numerator != 0) { |
12 | | - // Find the smallest unit fraction that can be subtracted |
13 | | - if (denominator % numerator == 0) { |
14 | | - result.add("1/" + (denominator / numerator)); |
15 | | - break; |
16 | | - } |
17 | | - int x = denominator / numerator + 1; |
| 13 | + // Find the smallest unit fraction |
| 14 | + int x = (denominator + numerator - 1) / numerator; // Ceiling of (denominator / numerator) |
| 15 | + fractions.add("1/" + x); |
18 | 16 |
|
19 | | - result.add("1/" + x); |
20 | | - // Update numerator and denominator for the next iteration |
| 17 | + // Update the numerator and denominator |
21 | 18 | numerator = numerator * x - denominator; |
22 | 19 | denominator = denominator * x; |
23 | | - |
24 | | - // Reduce the fraction by dividing numerator and denominator by their gcd |
25 | | - int gcd = gcd(numerator, denominator); |
26 | | - numerator /= gcd; |
27 | | - denominator /= gcd; |
28 | 20 | } |
29 | 21 |
|
30 | | - return result; |
| 22 | + return fractions; |
31 | 23 | } |
32 | 24 |
|
33 | | - private static int gcd(int a, int b) { |
34 | | - if (b == 0) |
35 | | - return a; |
| 25 | + private int gcd(int a, int b) { |
| 26 | + if (b == 0) return a; // Compact if statement for readability |
36 | 27 | return gcd(b, a % b); |
37 | 28 | } |
38 | | - |
39 | | - public static void main(String[] args) { |
40 | | - int numerator = 5; |
41 | | - int denominator = 6; |
42 | | - |
43 | | - List<String> egyptianFractions = getEgyptianFraction(numerator, denominator); |
44 | | - |
45 | | - System.out.println("Egyptian Fraction representation of " + numerator + "/" + denominator + " is:"); |
46 | | - for (String frac : egyptianFractions) { |
47 | | - System.out.print(frac + " "); |
48 | | - } |
49 | | - } |
50 | 29 | } |
51 | 30 |
|
52 | 31 |
|
0 commit comments