 Open in App
Not now

# Count of triplets (a, b, c) in the Array such that a divides b and b divides c

• Difficulty Level : Easy
• Last Updated : 28 May, 2022

Given an array arr[] of positive integers of size N, the task is to count number of triplets in the array such that a[i] divides a[j] and a[j] divides a[k] and i < j < k.
Examples:

Input: arr[] = {1, 2, 3, 4, 5, 6}
Output:
Explanation:
The triplets are: (1, 2, 4), (1, 2, 6), (1, 3, 6).
Input: arr[] = {1, 2, 2}
Output:
Explanation:
The triplet is (1, 2, 2)

Naive Approach: To solve the problem mentioned above, we will try to implement brute force solution. Traverse the array for all three numbers a[i], a[j] and a[k] and count the number of triplets which satisfies the given condition.
Time complexity: O(N3
Auxiliary Space complexity: O(1)
Efficient Approach: To optimize the above method we can traverse the array for the middle element from index 1 to n-2 and for every middle element we can traverse the left array for a[i] and count number of possible a[i]’s such that a[i] divides a[j]. Similarly, we can traverse in the right array and do the same thing for a[k].
Below is the implementation of the above approach:

## C++

 `// C++ program to find count of triplets``// (a, b, c) in the Array such that``// a divides b and b divides c` `#include ``using` `namespace` `std;` `// Function to count triplets``int` `getCount(``int` `arr[], ``int` `n)``{``    ``int` `count = 0;` `    ``// Iterate for middle element``    ``for` `(``int` `j = 1; j < n - 1; j++) {``        ``int` `p = 0, q = 0;` `        ``// Iterate left array for a[i]``        ``for` `(``int` `i = 0; i < j; i++) {` `            ``if` `(arr[j] % arr[i] == 0)``                ``p++;``        ``}` `        ``// Iterate right array for a[k]``        ``for` `(``int` `k = j + 1; k < n; k++) {` `            ``if` `(arr[k] % arr[j] == 0)``                ``q++;``        ``}` `        ``count += p * q;``    ``}``    ``// return the final result``    ``return` `count;``}` `// Driver code``int` `main()``{``    ``int` `arr[] = { 1, 2, 2 };``    ``int` `N = ``sizeof``(arr) / ``sizeof``(arr);` `    ``cout << getCount(arr, N) << endl;` `    ``return` `0;``}`

## Java

 `// Java program to find count of triplets``// (a, b, c) in the Array such that``// a divides b and b divides c``import` `java.io.*;``import` `java.util.*;` `class` `GFG {``    ` `// Function to count triplets``static` `int` `getCount(``int` `arr[], ``int` `n)``{``    ``int` `count = ``0``;` `    ``// Iterate for middle element``    ``for``(``int` `j = ``1``; j < n - ``1``; j++)``    ``{``       ``int` `p = ``0``, q = ``0``;``       ` `       ``// Iterate left array for a[i]``       ``for``(``int` `i = ``0``; i < j; i++)``       ``{``          ``if` `(arr[j] % arr[i] == ``0``)``              ``p++;``       ``}``       ` `       ``// Iterate right array for a[k]``       ``for``(``int` `k = j + ``1``; k < n; k++)``       ``{``          ``if` `(arr[k] % arr[j] == ``0``)``              ``q++;``       ``}``       ` `       ``count += p * q;``    ``}``    ` `    ``// return the final result``    ``return` `count;``}` `// Driver code``public` `static` `void` `main(String[] args)``{``    ``int` `arr[] = { ``1``, ``2``, ``2` `};``    ``int` `N = arr.length;``    ` `    ``System.out.println(getCount(arr, N));``}``}` `// This code is contributed by coder001`

## Python3

 `# Python3 program to find the count of``# triplets (a, b, c) in the Array such``# that a divides b and b divides c` `# Function to count triplets``def` `getCount(arr, n):``    ``count ``=` `0` `    ``# Iterate for middle element``    ``for` `j ``in` `range``(``1``, n ``-` `1``):``        ``p, q ``=` `0``, ``0` `        ``# Iterate left array for a[i]``        ``for` `i ``in` `range``(j):` `            ``if` `(arr[j] ``%` `arr[i] ``=``=` `0``):``                ``p ``+``=` `1` `        ``# Iterate right array for a[k]``        ``for` `k ``in` `range``(j ``+` `1``, n):` `            ``if` `(arr[k] ``%` `arr[j] ``=``=` `0``):``                ``q ``+``=` `1` `        ``count ``+``=` `p ``*` `q``        ` `    ``# Return the final result``    ``return` `count` `# Driver code``if` `__name__ ``=``=` `'__main__'``:``    ` `    ``arr ``=` `[ ``1``, ``2``, ``2` `]``    ``N ``=` `len``(arr)``    ` `    ``print``(getCount(arr, N))``    ` `# This code is contributed by mohit kumar 29   `

## C#

 `// C# program to find count of triplets``// (a, b, c) in the Array such that``// a divides b and b divides c``using` `System;` `class` `GFG{` `// Function to count triplets``public` `static` `int` `getCount(``int``[] arr, ``int` `n)``{``    ``int` `count = 0;` `    ``// Iterate for middle element``    ``for``(``int` `j = 1; j < n - 1; j++)``    ``{``        ``int` `p = 0, q = 0;` `        ``// Iterate left array for a[i]``        ``for``(``int` `i = 0; i < j; i++)``        ``{``            ``if` `(arr[j] % arr[i] == 0)``                ``p++;``        ``}` `        ``// Iterate right array for a[k]``        ``for``(``int` `k = j + 1; k < n; k++)``        ``{``            ``if` `(arr[k] % arr[j] == 0)``                ``q++;``        ``}``        ``count += p * q;``    ``}` `    ``// return the final result``    ``return` `count;``}` `// Driver code``public` `static` `void` `Main()``{``    ``int``[] arr = { 1, 2, 2 };``    ``int` `N = arr.Length;` `    ``Console.WriteLine(getCount(arr, N));``}``}` `// This code is contributed by jrishabh99`

## Javascript

 ``

Output:

`1`

Time Complexity: O(N2), as we are using a nested loops to traverse N*N times.
Auxiliary Space: O(1), as we are not using any extra space.

My Personal Notes arrow_drop_up