Dados dos enteros N y K . Encuentre los números de tripletes (a, b, c) tales que 0 ≤ a, b, c ≤ N y (a + b) , (b + c) y (c + a) son múltiplos de K .
Ejemplos:
Entrada: N = 3, K = 2
Salida: 9
Los tripletes posibles son:
{(1, 1, 1), (1, 1, 3), (1, 3, 1)
(1, 3, 3), (2 , 2, 2), (3, 1, 1)
(3, 1, 1), (3, 1, 3), (3, 3, 3)}Entrada: N = 5, K = 3
Salida: 1
El único triplete posible es (3, 3, 3)
Enfoque: Dado que (a + b) , (b + c) y (c + a) son múltiplos de K . Por tanto, podemos decir que (a + b) % K = 0 , (b + c) % K = 0 y (c + a) % K = 0 .
Si a pertenece a la clase de módulo x de K , entonces b debería estar en la clase de módulo (K – x) utilizando la primera condición.
De la segunda condición, se puede ver que c pertenece a la clase x módulo de K . Ahora como a y cpertenecen a la misma clase de módulo y tienen que satisfacer la tercera relación que es (a + c) % K = 0 . Solo podría ser posible si x = 0 o x = K / 2 .
Cuando K es un entero impar, x = K/2 no es válido.
Por lo tanto, para resolver el problema, cuente el número de elementos de 0 a N en la clase de módulo 0 y la clase de módulo (K / 2) de K.
- Si K es impar , el resultado es cnt[0] 3
- Si K es par , el resultado es cnt[0] 3 + cnt[K / 2] 3 .
A continuación se muestra la implementación del enfoque anterior:
C++
// C++ implementation of the above approach #include <bits/stdc++.h> using namespace std; // Function to return the number of triplets int NoofTriplets(int N, int K) { int cnt[K]; // Initializing the count array memset(cnt, 0, sizeof(cnt)); // Storing the frequency of each modulo class for (int i = 1; i <= N; i += 1) { cnt[i % K] += 1; } // If K is odd if (K & 1) return cnt[0] * cnt[0] * cnt[0]; // If K is even else { return (cnt[0] * cnt[0] * cnt[0] + cnt[K / 2] * cnt[K / 2] * cnt[K / 2]); } } // Driver Code int main() { int N = 3, K = 2; // Function Call cout << NoofTriplets(N, K); return 0; }
Java
// Java implementation of the approach import java.util.Arrays; class GFG { // Function to return the number of triplets static int NoofTriplets(int N, int K) { int[] cnt = new int[K]; // Initializing the count array Arrays.fill(cnt, 0, cnt.length, 0); // Storing the frequency of each modulo class for (int i = 1; i <= N; i += 1) { cnt[i % K] += 1; } // If K is odd if ((K & 1) != 0) { return cnt[0] * cnt[0] * cnt[0]; } // If K is even else { return (cnt[0] * cnt[0] * cnt[0] + cnt[K / 2] * cnt[K / 2] * cnt[K / 2]); } } // Driver Code public static void main(String[] args) { int N = 3, K = 2; // Function Call System.out.println(NoofTriplets(N, K)); } } // This code is contributed by Princi Singh
C#
// C# implementation of the approach using System; class GFG { // Function to return the number of triplets static int NoofTriplets(int N, int K) { int[] cnt = new int[K]; // Initializing the count array Array.Fill(cnt, 0, cnt.Length, 0); // Storing the frequency of each modulo class for (int i = 1; i <= N; i += 1) { cnt[i % K] += 1; } // If K is odd if ((K & 1) != 0) { return cnt[0] * cnt[0] * cnt[0]; } // If K is even else { return (cnt[0] * cnt[0] * cnt[0] + cnt[K / 2] * cnt[K / 2] * cnt[K / 2]); } } // Driver Code static public void Main () { int N = 3, K = 2; // Function Call Console.Write(NoofTriplets(N, K)); } } // This code is contributed by ajit
Python3
# Python3 implementation of the above approach # Function to return the number of triplets def NoofTriplets(N, K) : # Initializing the count array cnt = [0]*K; # Storing the frequency of each modulo class for i in range(1, N + 1) : cnt[i % K] += 1; # If K is odd if (K & 1) : rslt = cnt[0] * cnt[0] * cnt[0]; return rslt # If K is even else : rslt = (cnt[0] * cnt[0] * cnt[0] + cnt[K // 2] * cnt[K // 2] * cnt[K // 2]); return rslt # Driver Code if __name__ == "__main__" : N = 3; K = 2; # Function Call print(NoofTriplets(N, K)); # This code is contributed by AnkitRai01
Javascript
<script> // Javascript implementation of the above approach // Function to return the number of triplets function NoofTriplets(N, K) { let cnt = Array(K); for(let i = 0; i < K; i++) cnt[i] = 0; // Storing the frequency of // each modulo class for(let i = 1; i <= N; i += 1) { cnt[i % K] += 1; } // If K is odd if (K & 1) return cnt[0] * cnt[0] * cnt[0]; // If K is even else { return (cnt[0] * cnt[0] * cnt[0] + cnt[K / 2] * cnt[K / 2] * cnt[K / 2]); } } // Driver Code let N = 3; let K = 2; // Function Call document.write(NoofTriplets(N, K)); // This code is contributed by mohit kumar 29 </script>
9
Complejidad de tiempo: O(N)
Espacio Auxiliar: O(K)