Find N fractions that sum upto a given fraction N/D (original) (raw)

Last Updated : 23 May, 2022

Given a fraction N/D, the task is to split this fraction into N parts such that their sum is equal to the fraction N/D, i.e.,
\frac{N}{D} = \frac{a_1}{b_1} + \frac{a_2}{b_2} + ... + \frac{a_N}{b_N}
Note: Represents the terms in terms of fractions, instead of floating point numbers.

Input: N = 4, D = 2
Output: 4/5, 1/5, 1/3, 4/6
Explanation:
\frac{4}{5} + \frac{1}{5} + \frac{1}{3} + \frac{4}{6} = \frac{4}{2}
Therefore, it is a valid set of fractions such that their sum is \frac{N}{D}

Input: N = 3, D = 4
Output: 1/2, 1/10, 3/20
Explanation:
\frac{1}{2} + \frac{1}{10} + \frac{3}{20} = \frac{3}{4}
Therefore, it is a valid set of fractions such that their sum is \frac{N}{D}

Approach: The key observation in the problem is that the first fraction numerator can be D + N - 1 and then further N-1 denominators can be using the below recurrence relation.

(i+1)^{th} Denominator = i^{th} Denominator * (i^{th} Denominator - 1)

Below is the implementation of the above approach:

C++ `

// C++ implementation to split the // fraction into N parts #include<bits/stdc++.h> using namespace std;

// Function to split the fraction // into the N parts void splitFraction(int n, int d) { int ar[n]; int first = d + n - 1; ar[0] = first;

// Loop to find the N - 1
// fraction
for(int i = 1; i < n; i++)
{
   int temp = --first;
   first++;

   ar[i] = first * temp;
   --first;
}

// Loop to print the Fractions
for(int i = 0; i < n; i++)
{
   if (ar[i] % n == 0) 
   {
       cout << "1/" << ar[i] / n << ", ";
   }
   else 
   {
       cout << n << "/" << ar[i] << ", ";
   }
}

}

// Driver Code int main() { int N = 4; int D = 2;

// Function Call
splitFraction(N, D);

}

// This code is contributed by Bhupendra_Singh

Java

// Java implementation to split the // fraction into N parts

import java.util.Scanner;

class Solution {

// Function to split the fraction
// into the N parts
public static void
splitFraction(int n, int d)
{

    long ar[] = new long[n];
    long first = d + n - 1;
    ar[0] = first;

    // Loop to find the N - 1
    // fraction
    for (int i = 1; i < n; i++) {
        ar[i] = first * (--first);
    }

    // Loop to print the Fractions
    for (int i = 0; i < n; i++) {
        if (ar[i] % n == 0) {
            System.out.print(
                "1/" + ar[i] / n
                + ", ");
        }
        else {
            System.out.print(
                n + "/" + ar[i]
                + ", ");
        }
    }
}

// Driver Code
public static void main(
    String[] args) throws Exception
{
    int N = 4;
    int D = 2;

    // Function Call
    splitFraction(N, D);
}

}

Python3

Python3 implementation to split the

fraction into N parts

Function to split the fraction

into the N parts

def splitFraction(n, d):

ar = []
for i in range(0, n): 
    ar.append(0)

first = d + n - 1
ar[0] = first

# Loop to find the N - 1 
# fraction
for i in range(1, n):
    temp = first - 1
    ar[i] = first * temp
    first -= 1

# Loop to print the Fractions 
for i in range(0, n):
    if ar[i] % n == 0:
        print("1/", int(ar[i] / n),
              "," , end = " ")
              
    else:
        print(n, "/", ar[i], ",", end = " ")

Driver Code

N = 4 D = 2

Function Call

splitFraction(N, D)

This code is contributed by ishayadav181

C#

// C# implementation to split the // fraction into N parts using System;

class GFG{

// Function to split the fraction // into the N parts public static void splitFraction(int n, int d) { long []ar = new long[n]; long first = d + n - 1; ar[0] = first;

// Loop to find the N - 1
// fraction
for(int i = 1; i < n; i++)
{
   ar[i] = first * (--first);
}

// Loop to print the Fractions
for(int i = 0; i < n; i++) 
{
   if (ar[i] % n == 0)
   {
       Console.Write("1/" + ar[i] / n + ", ");
   }
   else
   {
       Console.Write(n + "/" + ar[i] + ", ");
   }
}

}

// Driver Code public static void Main(String[] args) { int N = 4; int D = 2;

// Function Call
splitFraction(N, D);

} }

// This code is contributed by SoumikMondal

JavaScript

`

Output:

4/5, 1/5, 1/3, 4/6,

Time Complexity: O(n), where n is the given integer.

Auxiliary Space: O(n), where n is the given integer.