# Split the fraction into sum of multiple fractions having numerator as 1

Given two positive integers **N** and **D** representing a fraction as **N/D**, the task is to split the fraction into the sum of multiple fractions having numerator as **1**.

**Examples:**

Input:n = 4, d = 5Output:1/2, 1/4, 1/20Explanation:1/2 + 1/4 + 1/20 = 4/5

Input:n = 15, d = 16Output:1/2, 1/3, 1/10, 1/240

**Approach: **The idea is that all positive fractions of the form **n/d** can be written as a sum of distinct unit fractions. The answer can be found by removing largest unit fraction **1/x **till the fraction reaches to **zero** where x can be found as ceil**(d/n). **After finding the unit fraction, update the fraction to **n/d – 1/x** so **n** changes to **nx-d** and **d** changes to **dx **at each step.

Below is the implementation of the above approach:

## C++

`// C++ program for the above approach` `#include <bits/stdc++.h>` `using` `namespace` `std;` `// Function to split the fraction into` `// distinct unit fraction` `vector<string> FractionSplit(` `long` `long` `n, ` `long` `long` `d)` `{` ` ` `// To store answer` ` ` `vector<string> UnitFactions;` ` ` `// While numerator is positive` ` ` `while` `(n > 0) {` ` ` `// Finding x = ceil(d/n)` ` ` `long` `long` `x = (d + n - 1) / n;` ` ` `// Add 1/x to list of ans` ` ` `string s = ` `"1/"` `+ to_string(x);` ` ` `UnitFactions.push_back(s);` ` ` `// Update fraction` ` ` `n = n * x - d;` ` ` `d = d * x;` ` ` `}` ` ` `return` `UnitFactions;` `}` `// Driver Code` `int` `main()` `{` ` ` `// Given Input` ` ` `long` `long` `n = 13, d = 18;` ` ` `// Function Call` ` ` `auto` `res = FractionSplit(n, d);` ` ` `// Print Answer` ` ` `for` `(string s : res)` ` ` `cout << s << ` `", "` `;` ` ` `return` `0;` `}` |

## Java

`// Java program for the above approach` `import` `java.util.Vector;` `public` `class` `GFG {` ` ` `// Function to split the fraction into` ` ` `// distinct unit fraction` ` ` `static` `Vector<String> FractionSplit(` `long` `n, ` `long` `d)` ` ` `{` ` ` `// To store answer` ` ` `Vector<String> UnitFactions = ` `new` `Vector<>();` ` ` `// While numerator is positive` ` ` `while` `(n > ` `0` `) {` ` ` `// Finding x = ceil(d/n)` ` ` `long` `x = (d + n - ` `1` `) / n;` ` ` `// Add 1/x to list of ans` ` ` `String s = ` `"1/"` `+ String.valueOf(x);` ` ` `UnitFactions.add(s);` ` ` `// Update fraction` ` ` `n = n * x - d;` ` ` `d = d * x;` ` ` `}` ` ` `return` `UnitFactions;` ` ` `}` ` ` `// Driver code` ` ` `public` `static` `void` `main(String[] args)` ` ` `{` ` ` ` ` `// Given Input` ` ` `long` `n = ` `13` `, d = ` `18` `;` ` ` `// Function Call` ` ` `Vector<String> res = FractionSplit(n, d);` ` ` `// Print Answer` ` ` `for` `(String s : res)` ` ` `System.out.print(s + ` `", "` `);` ` ` `}` `}` `// This code is contributed by abhinavjain194` |

## Python3

`# Python program for the above approach` `# Function to split the fraction into` `# distinct unit fraction` `def` `FractionSplit(n, d):` ` ` `# To store answer` ` ` `UnitFactions ` `=` `[]` ` ` `# While numerator is positive` ` ` `while` `(n > ` `0` `):` ` ` `# Finding x = ceil(d/n)` ` ` `x ` `=` `(d ` `+` `n ` `-` `1` `) ` `/` `/` `n` ` ` `# Add 1/x to list of ans` ` ` `s ` `=` `"1/"` `+` `str` `(x)` ` ` `UnitFactions.append(s);` ` ` `# Update fraction` ` ` `n ` `=` `n ` `*` `x ` `-` `d;` ` ` `d ` `=` `d ` `*` `x` ` ` `return` `UnitFactions;` `# Driver Code` `# Given Input` `n ` `=` `13` `;` `d ` `=` `18` `;` `# Function Call` `res ` `=` `FractionSplit(n, d);` `# Print Answer` `for` `s ` `in` `res:` ` ` `print` `(s ` `+` `", "` `, end` `=` `" "` `);` `# This code is contributed by _saurabh_jaiswal` |

## C#

`// C# program for the above approach` `using` `System;` `using` `System.Collections.Generic;` `class` `GFG{` `// Function to split the fraction into` `// distinct unit fraction` `static` `List<` `string` `> FractionSplit(` `long` `n, ` `long` `d)` `{` ` ` ` ` `// To store answer` ` ` `List<` `string` `> UnitFactions = ` `new` `List<` `string` `>();` ` ` `// While numerator is positive` ` ` `while` `(n > 0)` ` ` `{` ` ` ` ` `// Finding x = ceil(d/n)` ` ` `long` `x = (d + n - 1) / n;` ` ` `// Add 1/x to list of ans` ` ` `string` `s = ` `"1/"` `+ x.ToString();` ` ` `UnitFactions.Add(s);` ` ` `// Update fraction` ` ` `n = n * x - d;` ` ` `d = d * x;` ` ` `}` ` ` `return` `UnitFactions;` `}` `// Driver code` `public` `static` `void` `Main(` `string` `[] args)` `{` ` ` ` ` `// Given Input` ` ` `long` `n = 13, d = 18;` ` ` `// Function Call` ` ` `List<` `string` `> res = FractionSplit(n, d);` ` ` `// Print Answer` ` ` `foreach` `(` `string` `s ` `in` `res)` ` ` `Console.Write(s + ` `", "` `);` `}` `}` `// This code is contributed by ukasp` |

## Javascript

`<script>` `// Javascript program for the above approach` `// Function to split the fraction into` `// distinct unit fraction` `function` `FractionSplit(n, d) {` ` ` `// To store answer` ` ` `let UnitFactions = [];` ` ` `// While numerator is positive` ` ` `while` `(n > 0) {` ` ` `// Finding x = ceil(d/n)` ` ` `let x = Math.floor((d + n - 1) / n);` ` ` `// Add 1/x to list of ans` ` ` `let s = ` `"1/"` `+ String(x);` ` ` `UnitFactions.push(s);` ` ` `// Update fraction` ` ` `n = n * x - d;` ` ` `d = d * x;` ` ` `}` ` ` `return` `UnitFactions;` `}` `// Driver Code` `// Given Input` `let n = 13, d = 18;` `// Function Call` `let res = FractionSplit(n, d);` `// Print Answer` `for` `(let s of res)` ` ` `document.write(s + ` `", "` `);` `// This code is contributed by gfgking.` `</script>` |

**Output**

1/2, 1/5, 1/45,

**Time Complexity: **O(1)**Auxiliary Space: **O(1)

Attention reader! Don’t stop learning now. Get hold of all the important mathematical concepts for competitive programming with the **Essential Maths for CP Course** at a student-friendly price. To complete your preparation from learning a language to DS Algo and many more, please refer **Complete Interview Preparation Course****.**