Count of ways to write N as a sum of three numbers

Given a positive integer N, count number of ways to write N as a sum of three numbers. For numbers which are not expressible print -1.

Examples:

Input: N = 4
Output: 3
Explanation:
( 1 + 1 + 2 ) = 4
( 1 + 2 + 1 ) = 4
( 2 + 1 + 1 ) = 4.
So in total, there are 3 ways.

Input: N = 5
Output: 6
( 1 + 1 + 3 ) = 5
( 1 + 3 + 1 ) = 5
( 3 + 1 + 1 ) = 5
( 1 + 2 + 2 ) = 5
( 2 + 2 + 1 ) = 5
( 2 + 1 + 2 ) = 5.
So in total, there are 6 ways

Recommended: Please try your approach on {IDE} first, before moving on to the solution.

Approach: To solve the problem mentioned above if we take a closer look we will observe a pattern in solution to the question. For all the numbers that are greater than 2 we get a series 3, 6, 10, 15, 25 and so on, which is nothing but the sum of first N-1 natural numbers.

Below is the implementation of the above approach:

C++

 `// C++ program to count the total number of ` `// ways to write N as a sum of three numbers ` ` `  `#include ` `using` `namespace` `std; ` ` `  `// Function to find the number of ways ` `void` `countWays(``int` `n) ` `{ ` `    ``// Check if number is less than 2 ` `    ``if` `(n <= 2) ` `        ``cout << ``"-1"``; ` ` `  `    ``else` `{ ` `        ``// Calculate the sum ` `        ``int` `ans = (n - 1) * (n - 2) / 2; ` ` `  `        ``cout << ans; ` `    ``} ` `} ` ` `  `// Driver code ` `int` `main() ` `{ ` `    ``int` `N = 5; ` ` `  `    ``countWays(N); ` ` `  `    ``return` `0; ` `} `

Java

 `// Java program to count the total number of ` `// ways to write N as a sum of three numbers ` `class` `GFG{ ` ` `  `// Function to find the number of ways ` `static` `void` `countWays(``int` `n) ` `{ ` `     `  `    ``// Check if number is less than 2 ` `    ``if` `(n <= ``2``) ` `    ``{ ` `        ``System.out.print(``"-1"``); ` `    ``} ` `    ``else`  `    ``{ ` `         `  `        ``// Calculate the sum ` `        ``int` `ans = (n - ``1``) * (n - ``2``) / ``2``; ` `        ``System.out.print(ans); ` `    ``} ` `} ` ` `  `// Driver code ` `public` `static` `void` `main(String[] args) ` `{ ` `    ``int` `N = ``5``; ` `    ``countWays(N); ` `} ` `} ` ` `  `// This code is contributed by Amit Katiyar `

Python3

 `# Python3 program to count the total number of ` `# ways to write N as a sum of three numbers ` `def` `countWays(N):  ` ` `  `    ``# Check if number is less than 2 ` `    ``if` `(N <``=` `2``):  ` `        ``print``(``"-1"``)  ` `    ``else``: ` `         `  `        ``# Calculate the sum ` `        ``ans ``=` `(N ``-` `1``) ``*` `(N ``-` `2``) ``/` `2` `         `  `    ``print``(ans)  ` ` `  `# Driver code  ` `if` `__name__ ``=``=` `'__main__'``:  ` `     `  `    ``N ``=` `5` `    ``countWays(N) ` ` `  `# This code is contributed by coder001 `

C#

 `// C# program to count the total number of  ` `// ways to write N as a sum of three numbers  ` `using` `System; ` ` `  `class` `GFG{ ` `     `  `// Function to find the number of ways  ` `static` `void` `countWays(``int` `n)  ` `{  ` `         `  `    ``// Check if number is less than 2  ` `    ``if` `(n <= 2)  ` `    ``{  ` `        ``Console.WriteLine(``"-1"``); ` `    ``}  ` `    ``else` `    ``{  ` ` `  `        ``// Calculate the sum  ` `        ``int` `ans = (n - 1) * (n - 2) / 2;  ` `        ``Console.WriteLine(ans); ` `    ``}  ` `}  ` ` `  `// Driver code      ` `static` `void` `Main() ` `{ ` `    ``int` `N = 5;  ` `    ``countWays(N);  ` `} ` `} ` ` `  `// This code is contributed by divyeshrabadiya07     `

Output:

```6
```

Time Complexity: O(1)

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.

My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.