Contar pares ordenados de números con un MCM dado

Dado un número entero N , la tarea es contar el número total de pares ordenados de modo que el MCM de cada par sea igual a N.

Ejemplos:

Entrada: N = 6
Salida:
Explicación: 
Los pares con MCM igual a N(= 6) son {(1, 6), (2, 6), (2, 3), (3, 6), (6, 6) ), (6, 3), (3, 2), (6, 2), (6, 1)} 
Por lo tanto, la salida es 9.

Entrada: N = 36
Salida: 25

 

Enfoque: El problema se puede resolver con base en las siguientes observaciones:

Considere un par ordenado (X, Y). 
X = P 1 a1 * P 2 a2 * P 3 a3 *…..* Pn an 
Y = P 1 b1 * P 2 b2 * P 3 b3 *…..* Pn bn
Aquí, P 1 , P 2 , …. ., P n son factores primos de X e Y. 
LCM(X, Y) = P 1 max(a1, b1)  * P2 max(a2, b2) *……….*Pn max(an, bn)
Por lo tanto, mcm(x, y) = norte = pag 1 metro 1 * pag 2 metro 2 * pag3 m 3 *…..* Pn m n

Por lo tanto, el número total de pares ordenados (X, Y) 
= [{(m 1 + 1) 2 – m 1 2 } * {(m 2 + 1) 2 – m 2 2 } * ……* {(m n + 1) 2 – m n 2 } ]
= (2*m 1 +1) * (2*m 2 +1) * (2*m 3 +1) * ……..* (2*m n +1) .

Siga los pasos a continuación para resolver el problema:

  1. Inicialice una variable, digamos, countPower , para almacenar la potencia de todos los factores primos de N .
  2. Calcular la potencia de todos los factores primos de N .
  3. Finalmente, imprima el conteo de pares ordenados (X, Y) usando la fórmula mencionada anteriormente.

A continuación se muestra la implementación del enfoque anterior:
 

C++

// C++ program to implement
// the above approach
 
#include <bits/stdc++.h>
using namespace std;
 
// Function to count the number of
// ordered pairs with given LCM
int CtOrderedPairs(int N)
{
    // Stores count of
    // ordered pairs
    int res = 1;
 
    // Calculate power of all
    // prime factors of N
    for (int i = 2; i * i <= N; i++) {
 
        // Store the power of
        // prime factors
        int countPower = 0;
        while (N % i == 0) {
            countPower++;
            N /= i;
        }
 
        res = res * (2 * countPower
                     + 1);
    }
 
    if (N > 1) {
        res = res * (2 * 1 + 1);
    }
    return res;
}
 
// Driver Code
int main()
{
    int N = 36;
    cout << CtOrderedPairs(N);
}

Java

// Java program to implement
// the above approach
 
class GFG{
   
// Function to count the number of
// ordered pairs with given LCM
static int CtOrderedPairs(int N)
{
     
    // Stores count of
    // ordered pairs
    int res = 1;
 
    // Calculate power of all
    // prime factors of N
    for(int i = 2; i * i <= N; i++)
    {
         
        // Store the power of
        // prime factors
        int countPower = 0;
         
        while (N % i == 0)
        {
            countPower++;
            N /= i;
        }
        res = res * (2 * countPower + 1);
    }
 
    if (N > 1)
    {
        res = res * (2 * 1 + 1);
    }
    return res;
}
 
// Driver Code
public static void main(String[] args)
{
    int N = 36;
     
    System.out.println(CtOrderedPairs(N));
}
}
 
// This code is contributed by aimformohan

Python3

# Python3 program to implement
# the above approach
  
# Function to count the number of
# ordered pairs with given LCM
def CtOrderedPairs(N):
 
    # Stores count of
    # ordered pairs
    res = 1
  
    # Calculate power of all
    # prime factors of N
    i = 2
    while(i * i <= N):
  
        # Store the power of
        # prime factors
        countPower = 0
        while (N % i == 0):
            countPower += 1
            N //= i
  
        res = res * (2 * countPower + 1)
        i += 1
     
    if (N > 1):
        res = res * (2 * 1 + 1)
     
    return res
 
# Driver Code
N = 36
 
print(CtOrderedPairs(N))
 
# This code is contributed by code_hunt

C#

// C# program to implement
// the above approach
using System;
  
class GFG{
    
// Function to count the number of
// ordered pairs with given LCM
static int CtOrderedPairs(int N)
{
     
    // Stores count of
    // ordered pairs
    int res = 1;
  
    // Calculate power of all
    // prime factors of N
    for(int i = 2; i * i <= N; i++)
    {
          
        // Store the power of
        // prime factors
        int countPower = 0;
          
        while (N % i == 0)
        {
            countPower++;
            N /= i;
        }
        res = res * (2 * countPower + 1);
    }
  
    if (N > 1)
    {
        res = res * (2 * 1 + 1);
    }
    return res;
}
  
// Driver Code
public static void Main()
{
    int N = 36;
      
    Console.WriteLine(CtOrderedPairs(N));
}
}
 
// This code is contributed by code_hunt

Javascript

<script>
 
// Javascript program to implement
// the above approach
 
// Function to count the number of
// ordered pairs with given LCM
function CtOrderedPairs(N)
{
       
    // Stores count of
    // ordered pairs
    let res = 1;
   
    // Calculate power of all
    // prime factors of N
    for(let i = 2; i * i <= N; i++)
    {
           
        // Store the power of
        // prime factors
        let countPower = 0;
           
        while (N % i == 0)
        {
            countPower++;
            N /= i;
        }
        res = res * (2 * countPower + 1);
    }
   
    if (N > 1)
    {
        res = res * (2 * 1 + 1);
    }
    return res;
}
 
// Driver Code
 
    let N = 36;
       
    document.write(CtOrderedPairs(N));
           
</script>
Producción: 

25

 

Complejidad de Tiempo: O(√N)  
Espacio Auxiliar: O(1)

Publicación traducida automáticamente

Artículo escrito por aimformohan 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 *