Given two integers **N** and **M**, where N is the number of friends sitting in a clockwise manner in a circle and M is the number of cakes. The task is to calculate the left number of cakes after distributing **i** cakes to **i’th** friend. The distribution of cakes will stop if the count of cakes is less than the required amount.**Examples:**

Input:N = 4, M = 11Output:0

1st round:

The 1st friend gets 1 cake, 2nd gets 2 cakes,

3rd get 3 and 4th gets 4 cakes.

Remaining cakes = 11 – (1 + 2 + 3 + 4) = 1

2nd round:

This time only 1st friend gets the left 1 cake.

Remaining cakes = 1 – 1 = 0Input:N = 3, M = 8Output:1

1st round:

The 1st friend gets 1 cake, 2nd gets 2 cakes,

and 3rd get 3 cakes.

Remaining cakes = 8 – (1 + 2 + 3) = 2

2nd round:

This time only 1st friend gets the left 1 cake,

and then there is no cake left for 2nd friend.

Remaining cakes = 2 – 1 = 1

**Approach:**

- Check how many cycles of distribution of cakes are possible from m number of cakes.
- Calculate the number of cakes for 1 cycle which is

sum = n * (n + 1) / 2

- Now diving M by sum we get cycle count + some remainder.
- Now check how many remaining cakes are again possible to distribute to x friends.
- The value of x can be easily achieved by solving quadratic equation

remainder = x * (x + 1) / 2

Below is the implementation of the above approach:

## C++

`// C++ implementation of the approach` `#include<bits/stdc++.h>` `using` `namespace` `std;` `// Function to return the` `// remaining count of cakes` `int` `cntCakes(` `int` `n, ` `int` `m)` `{` ` ` `// Sum for 1 cycle` ` ` `int` `sum = (n * (n + 1)) / 2;` ` ` `// no. of full cycle and remainder` ` ` `int` `quo = m/sum ;` ` ` `int` `rem = m % sum ;` ` ` `double` `ans = m - quo * sum ;` ` ` `double` `x = (-1 + ` `pow` `((8 * rem) + 1, 0.5)) / 2;` ` ` ` ` `ans = ans - x * (x + 1) / 2;` ` ` `return` `int` `(ans);` `}` `// Driver Code` `int` `main ()` `{` ` ` `int` `n = 3;` ` ` `int` `m = 8;` ` ` `int` `ans = cntCakes(n, m);` ` ` `cout << (ans);` `}` `// This code is contributed by Surendra_Gangwar` |

## Java

`// Java implementation of the approach` `class` `GFG` `{` ` ` ` ` `// Function to return the` ` ` `// remaining count of cakes` ` ` `static` `int` `cntCakes(` `int` `n, ` `int` `m)` ` ` `{` ` ` ` ` `// Sum for 1 cycle` ` ` `int` `sum = (n * (n + ` `1` `)) / ` `2` `;` ` ` ` ` `// no. of full cycle and remainder` ` ` `int` `quo = m/sum ;` ` ` `int` `rem = m % sum ;` ` ` `double` `ans = m - quo * sum ;` ` ` ` ` `double` `x = (-` `1` `+ Math.pow((` `8` `* rem) + ` `1` `, ` `0.5` `)) / ` `2` `;` ` ` ` ` `ans = ans - x * (x + ` `1` `) / ` `2` `;` ` ` ` ` `return` `(` `int` `)ans;` ` ` `}` ` ` `// Driver Code` ` ` `public` `static` `void` `main (String[] args)` ` ` `{` ` ` `int` `n = ` `3` `;` ` ` `int` `m = ` `8` `;` ` ` `int` `ans = cntCakes(n, m);` ` ` `System.out.println(ans);` ` ` `}` `}` `// This code is contributed by AnkitRai01` |

## Python3

`# Python3 implementation of the approach` `# Function to return the` `# remaining count of cakes` `def` `cntCakes(n, m):` ` ` `# Sum for 1 cycle` ` ` `sum` `=` `(n` `*` `(n ` `+` `1` `))` `/` `/` `2` ` ` `# no. of full cycle and remainder` ` ` `quo, rem ` `=` `m` `/` `/` `sum` `, m ` `%` `sum` ` ` `ans ` `=` `m ` `-` `quo ` `*` `sum` ` ` `x ` `=` `int` `((` `-` `1` `+` `(` `8` `*` `rem ` `+` `1` `)` `*` `*` `0.5` `)` `/` `2` `)` ` ` `ans ` `=` `ans ` `-` `x` `*` `(x ` `+` `1` `)` `/` `/` `2` ` ` `return` `ans` `# Driver code` `def` `main():` ` ` `n ` `=` `4` ` ` `m ` `=` `11` ` ` `ans ` `=` `cntCakes(n, m)` ` ` `print` `(ans)` `main()` |

## C#

`// C# implementation of the approach` `using` `System;` `class` `GFG` `{` ` ` `// Function to return the` ` ` `// remaining count of cakes` ` ` `static` `int` `cntCakes(` `int` `n, ` `int` `m)` ` ` `{` ` ` ` ` `// Sum for 1 cycle` ` ` `int` `sum = (n * (n + 1)) / 2;` ` ` ` ` `// no. of full cycle and remainder` ` ` `int` `quo = m/sum ;` ` ` `int` `rem = m % sum ;` ` ` `double` `ans = m - quo * sum ;` ` ` ` ` `double` `x = (-1 + Math.Pow((8 * rem) + 1, 0.5)) / 2;` ` ` ` ` `ans = ans - x * (x + 1) / 2;` ` ` ` ` `return` `(` `int` `)ans;` ` ` `}` ` ` `// Driver Code` ` ` `static` `public` `void` `Main ()` ` ` `{` ` ` `int` `n = 3;` ` ` `int` `m = 8;` ` ` `int` `ans = cntCakes(n, m);` ` ` `Console.Write(ans);` ` ` `}` `}` `// This code is contributed by ajit.` |

## Javascript

`<script>` ` ` `// Javascript implementation of the approach` ` ` ` ` `// Function to return the` ` ` `// remaining count of cakes` ` ` `function` `cntCakes(n, m)` ` ` `{` ` ` ` ` `// Sum for 1 cycle` ` ` `let sum = (n * (n + 1)) / 2;` ` ` ` ` `// no. of full cycle and remainder` ` ` `let quo = m/sum;` ` ` `let rem = m % sum ;` ` ` `let ans = m - quo * sum + 6;` ` ` ` ` `let x = (-1 + Math.pow((8 * rem) + 1, 0.5));` ` ` ` ` `ans = ans - x * (x + 1) / 2;` ` ` ` ` `return` `parseInt(ans, 10);` ` ` `}` ` ` ` ` `let n = 3;` ` ` `let m = 8;` ` ` `let ans = cntCakes(n, m);` ` ` `document.write(ans);` `// This code is contributed by suresh07.` `</script>` |

**Output:**

0

**Time Complexity:** 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****.**