# Maximum count of Equilateral Triangles that can be formed within given Equilateral Triangle

Given two integers N and K where N denotes the unit size of a bigger Equilateral Triangle, the task is to find the number of an equilateral triangle of size K that are present in the bigger triangle of side N.

Examples:

Input: N = 4, K = 3

Output: 3
Explanation:
There are 3 equilateral triangles of 3 unit size which are present in the Bigger equilateral triangle of size 4 units.

Input: N = 4, K = 2
Output: 7
Explanation:
There are 7 equilateral triangles of 2 unit size which are present in the Bigger equilateral triangle of size 4 units.

Naive Approach: The idea is to iterate over all possible sizes of the bigger equilateral triangle for checking the number of triangles with the required size K and print the total count of triangles.

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

Efficient Approach: To optimize the above approach, observe the following points:

• The number of triangles with a peak in the upward direction of size K present in size N equals to ((N – K +1 ) * (N – K + 2))/2.
• The number of inverted triangles with a peak in the downward direction of size K present in size N equals to ((N – 2K + 1) * (N – 2K + 2))/2.

Below is the implementation of the above approach:

 `// C++ program for the above approach` `#include ` `using` `namespace` `std;`   `// Function to find the number of` `// equilateral triangle formed` `// within another triangle` `int` `No_of_Triangle(``int` `N, ``int` `K)` `{` `    ``// Check for the valid condition` `    ``if` `(N < K)` `        ``return` `-1;`   `    ``else` `{`   `        ``int` `Tri_up = 0;`   `        ``// Number of triangles having` `        ``// upward peak` `        ``Tri_up = ((N - K + 1)` `                  ``* (N - K + 2))` `                 ``/ 2;`   `        ``int` `Tri_down = 0;`   `        ``// Number of inverted triangles` `        ``Tri_down = ((N - 2 * K + 1)` `                    ``* (N - 2 * K + 2))` `                   ``/ 2;`   `        ``// Total no. of K sized triangle` `        ``return` `Tri_up + Tri_down;` `    ``}` `}`   `// Driver Code` `int` `main()` `{` `    ``// Given N and K` `    ``int` `N = 4, K = 2;`   `    ``// Function Call` `    ``cout << No_of_Triangle(N, K);` `    ``return` `0;` `}`

 `// Java program for the above approach` `import` `java.util.*;` `class` `GFG{`   `// Function to find the number of` `// equilateral triangle formed` `// within another triangle` `static` `int` `No_of_Triangle(``int` `N, ``int` `K)` `{` `    ``// Check for the valid condition` `    ``if` `(N < K)` `        ``return` `-``1``;`   `    ``else` `    ``{` `        ``int` `Tri_up = ``0``;`   `        ``// Number of triangles having` `        ``// upward peak` `        ``Tri_up = ((N - K + ``1``) * (N - K + ``2``)) / ``2``;`   `        ``int` `Tri_down = ``0``;`   `        ``// Number of inverted triangles` `        ``Tri_down = ((N - ``2` `* K + ``1``) * ` `                    ``(N - ``2` `* K + ``2``)) / ``2``;`   `        ``// Total no. of K sized triangle` `        ``return` `Tri_up + Tri_down;` `    ``}` `}`   `// Driver Code` `public` `static` `void` `main(String[] args)` `{` `    ``// Given N and K` `    ``int` `N = ``4``, K = ``2``;`   `    ``// Function Call` `    ``System.out.print(No_of_Triangle(N, K));` `}` `}`   `// This code is contributed by PrinciRaj1992`

 `# Python3 program for the above approach`   `# Function to find the number of` `# equilateral triangle formed` `# within another triangle` `def` `No_of_Triangle(N, K):` `  `  `    ``# Check for the valid condition` `    ``if` `(N < K):` `        ``return` `-``1``;`   `    ``else``:` `        ``Tri_up ``=` `0``;`   `        ``# Number of triangles having` `        ``# upward peak` `        ``Tri_up ``=` `((N ``-` `K ``+` `1``) ``*` `                  ``(N ``-` `K ``+` `2``)) ``/``/` `2``;`   `        ``Tri_down ``=` `0``;`   `        ``# Number of inverted triangles` `        ``Tri_down ``=` `((N ``-` `2` `*` `K ``+` `1``) ``*` `                    ``(N ``-` `2` `*` `K ``+` `2``)) ``/``/` `2``;`   `        ``# Total no. of K sized triangle` `        ``return` `Tri_up ``+` `Tri_down;` `    `  `# Driver Code` `if` `__name__ ``=``=` `'__main__'``:` `    ``# Given N and K` `    ``N ``=` `4``; K ``=` `2``;`   `    ``# Function Call` `    ``print``(No_of_Triangle(N, K));`   `# This code is contributed by sapnasingh4991`

 `// C# program for the above approach` `using` `System;` `class` `GFG{`   `// Function to find the number of` `// equilateral triangle formed` `// within another triangle` `static` `int` `No_of_Triangle(``int` `N, ``int` `K)` `{` `    ``// Check for the valid condition` `    ``if` `(N < K)` `        ``return` `-1;`   `    ``else` `    ``{` `        ``int` `Tri_up = 0;`   `        ``// Number of triangles having` `        ``// upward peak` `        ``Tri_up = ((N - K + 1) * (N - K + 2)) / 2;`   `        ``int` `Tri_down = 0;`   `        ``// Number of inverted triangles` `        ``Tri_down = ((N - 2 * K + 1) * ` `                    ``(N - 2 * K + 2)) / 2;`   `        ``// Total no. of K sized triangle` `        ``return` `Tri_up + Tri_down;` `    ``}` `}`   `// Driver Code` `public` `static` `void` `Main(String[] args)` `{` `    ``// Given N and K` `    ``int` `N = 4, K = 2;`   `    ``// Function Call` `    ``Console.Write(No_of_Triangle(N, K));` `}` `}`   `// This code is contributed by Rajput-Ji`

Output:
```7

```

Time Complexity: O(1)
Auxiliary Space: 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.

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.

Article Tags :