Número de tripletes tales que cada valor es menor que N y la suma de cada par es un múltiplo de K

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:
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:
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>
Producción: 

9

 

Complejidad de tiempo: O(N)

Espacio Auxiliar: O(K)
 

Publicación traducida automáticamente

Artículo escrito por CrazyPro y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *