# Count of triplets till N whose product is at most N

Given a positive integer **N**, the task is to find the number of triplets **(A, B, C)** from the first N Natural Numbers such that **A * B * C â‰¤ N**.

**Examples:**

Input:N = 3Output:4Explanation:

Following are the triplets that satisfy the given criteria:

- ( 1, 1, 1 ) => 1 * 1 * 1 = 1 â‰¤ 2.
- ( 1, 1, 2 ) => 1 * 1 * 2 = 2 â‰¤ 2.
- ( 1, 2, 1 ) => 1 * 2 * 1 = 2 â‰¤ 2.
- ( 2, 1, 1 ) => 2 * 1 * 1 = 2 â‰¤ 2.
Therefore, the total count of triplets is 4.

Input:N = 10Output:53

**Naive Approach:** The simplest approach to solve the given problem is to generate all possible triplets from the first **N** natural numbers and count those triplets that satisfy the given criteria. After checking for all the triplets, print the total count obtained.

**Time Complexity:** O(N^{3})**Auxiliary Space:** O(1)

**Efficient Approach:** The above approach can be optimized by the observation that if **A** and **B** are fixed, then it is possible to calculate all the possible choices for **C** by doing **N/(A*B)** because **N/(A*B)** will give the maximum value, say **X**, which on multiplication with **(A*B)** results in a value less than or equal to **N**. So, all possible choices of **C** will be from **1** to **X**. Now, **A** and **B** can be fixed by trying **A** for every possible number till **N**, and **B** for every possible number till **(N/A)**. Follow the steps below to solve the given problem:

- Initialize variable, say
**cnt**as**0**that stores the count of triplets possible. - Iterate a loop over the range
**[1, N]**using the variable**i**and nested iterate over the range**[1, N]**using the variable**j**and increment the value of**cnt**by the value of**cnt/(i*j)**. - After completing the above steps, print the value of
**cnt**as the result.

Below is the implementation of the approach:

## C++

`// C++ program for the above approach` `#include <bits/stdc++.h>` `using` `namespace` `std;` `// Function to find number of triplets` `// (A, B, C) having A * B * C <= N` `int` `countTriplets(` `int` `N)` `{` ` ` `// Stores the count of triplets` ` ` `int` `cnt = 0;` ` ` `// Iterate a loop fixing the value` ` ` `// of A` ` ` `for` `(` `int` `A = 1; A <= N; ++A) {` ` ` `// Iterate a loop fixing the` ` ` `// value of A` ` ` `for` `(` `int` `B = 1; B <= N / A; ++B) {` ` ` `// Find the total count of` ` ` `// triplets and add it to cnt` ` ` `cnt += N / (A * B);` ` ` `}` ` ` `}` ` ` `// Return the total triplets formed` ` ` `return` `cnt;` `}` `// Driver Code` `int` `main()` `{` ` ` `int` `N = 2;` ` ` `cout << countTriplets(N);` ` ` `return` `0;` `}` |

## Java

`// Java program for the above approach` `import` `java.io.*;` `class` `GFG {` ` ` `// Function to find number of triplets` ` ` `// (A, B, C) having A * B * C <= N` ` ` `static` `int` `countTriplets(` `int` `N)` ` ` `{` ` ` ` ` `// Stores the count of triplets` ` ` `int` `cnt = ` `0` `;` ` ` `// Iterate a loop fixing the value` ` ` `// of A` ` ` `for` `(` `int` `A = ` `1` `; A <= N; ++A) {` ` ` `// Iterate a loop fixing the` ` ` `// value of A` ` ` `for` `(` `int` `B = ` `1` `; B <= N / A; ++B) {` ` ` `// Find the total count of` ` ` `// triplets and add it to cnt` ` ` `cnt += N / (A * B);` ` ` `}` ` ` `}` ` ` `// Return the total triplets formed` ` ` `return` `cnt;` ` ` `}` ` ` `// Driver Code` ` ` `public` `static` `void` `main(String[] args)` ` ` `{` ` ` `int` `N = ` `2` `;` ` ` `System.out.println(countTriplets(N));` ` ` `}` `}` `// This code is contributed by dwivediyash` |

## Python3

`# Python3 program for the above approach` `# Function to find number of triplets` `# (A, B, C) having A * B * C <= N` `def` `countTriplets(N) :` ` ` ` ` `# Stores the count of triplets` ` ` `cnt ` `=` `0` `;` ` ` `# Iterate a loop fixing the value` ` ` `# of A` ` ` `for` `A ` `in` `range` `( ` `1` `, N ` `+` `1` `) :` ` ` `# Iterate a loop fixing the` ` ` `# value of A` ` ` `for` `B ` `in` `range` `(` `1` `, N ` `/` `/` `A ` `+` `1` `) :` ` ` `# Find the total count of` ` ` `# triplets and add it to cnt` ` ` `cnt ` `+` `=` `N ` `/` `/` `(A ` `*` `B);` ` ` `# Return the total triplets formed` ` ` `return` `cnt;` `# Driver Code` `if` `__name__ ` `=` `=` `"__main__"` `:` ` ` `N ` `=` `2` `;` ` ` `print` `(countTriplets(N));` ` ` `# This code is contributed by AnkThon` |

## C#

`// C# program for the above approach` `using` `System;` `public` `class` `GFG {` ` ` `// Function to find number of triplets` ` ` `// (A, B, C) having A * B * C <= N` ` ` `static` `int` `countTriplets(` `int` `N)` ` ` `{` ` ` ` ` `// Stores the count of triplets` ` ` `int` `cnt = 0;` ` ` `// Iterate a loop fixing the value` ` ` `// of A` ` ` `for` `(` `int` `A = 1; A <= N; ++A) {` ` ` `// Iterate a loop fixing the` ` ` `// value of A` ` ` `for` `(` `int` `B = 1; B <= N / A; ++B) {` ` ` `// Find the total count of` ` ` `// triplets and add it to cnt` ` ` `cnt += N / (A * B);` ` ` `}` ` ` `}` ` ` `// Return the total triplets formed` ` ` `return` `cnt;` ` ` `}` ` ` `// Driver Code` ` ` `public` `static` `void` `Main(` `string` `[] args)` ` ` `{` ` ` `int` `N = 2;` ` ` `Console.WriteLine(countTriplets(N));` ` ` `}` `}` `// This code is contributed by AnkThon` |

## Javascript

`<script>` ` ` `// JavaScript Program to implement` ` ` `// the above approach` ` ` `// Function to find number of triplets` ` ` `// (A, B, C) having A * B * C <= N` ` ` `function` `countTriplets(N) {` ` ` `// Stores the count of triplets` ` ` `let cnt = 0;` ` ` `// Iterate a loop fixing the value` ` ` `// of A` ` ` `for` `(let A = 1; A <= N; ++A) {` ` ` `// Iterate a loop fixing the` ` ` `// value of A` ` ` `for` `(let B = 1; B <= N / A; ++B) {` ` ` `// Find the total count of` ` ` `// triplets and add it to cnt` ` ` `cnt += N / (A * B);` ` ` `}` ` ` `}` ` ` `// Return the total triplets formed` ` ` `return` `cnt;` ` ` `}` ` ` `// Driver Code` ` ` `let N = 2;` ` ` `document.write(countTriplets(N));` `// This code is contributed by Potta Lokesh` ` ` `</script>` |

**Output:**

4

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