Producto de factores de número

Dado un número n, encuentre el producto de todos los factores de n. Dado que el producto puede ser muy grande, respóndalo módulo 10^9 + 7.
Ejemplos: 
 

Input : 12
Output : 1728
1 * 2 * 3 * 4 * 6 * 12 = 1728

Input : 18
Output : 5832
1 * 2 * 3 * 6 * 9 * 18 = 5832

Método 1 (enfoque ingenuo): 
podemos ejecutar el bucle para i de 1 an y si n es divisible por i multiplicar los números. La complejidad del tiempo para esta solución será O(n).
Pero este enfoque es insuficiente para valores grandes de n.
Método 2 (mejor enfoque): 
un mejor enfoque es ejecutar el bucle para i de 1 a sqrt (n). Si el número es divisible por lo multiplico con i y n/i. 
La complejidad temporal de esta solución será O(sqrt(n)). 
 

C++

// C++ program to calculate product
// of factors of number
#include <bits/stdc++.h>
#define M 1000000007
using namespace std;
 
// function to product the factors
long long multiplyFactors(int n)
{
    long long prod = 1;
    for (int i = 1; i * i <= n; i++)
    {
        if (n % i == 0)
        {
            // If factors are equal,
            // multiply only once
            if (n / i == i)
                prod = (prod * i) % M;
 
            // Otherwise multiply both
            else {
                prod = (prod * i) % M;
                prod = (prod * n / i) % M;
            }
        }
    }
    return prod;
}
 
// Driver code
int main()
{
    int n = 12;
 
    cout << multiplyFactors(n) << endl;
 
    return 0;
}

Java

// Java program to calculate product
// of factors of number
class GFG
{
public static final long M = 1000000007;
 
    // function to product the factors
    static long multiplyFactors(int n)
    {
        long prod = 1;
        for (int i = 1; i * i <= n; i++)
        {
            if (n % i == 0)
            {
 
                // If factors are equal,
                // multiply only once
                if (n / i == i)
                    prod = (prod * i) % M;
 
                // Otherwise multiply both
                else {
                    prod = (prod * i) % M;
                    prod = (prod * n / i) % M;
                }
            }
        }
        return prod;
    }
 
    // Driver Code
    public static void main(String[] args)
    {
        int n = 12;
        System.out.println(multiplyFactors(n));
    }
}

Python

# Python program to calculate product
# of factors of number
 
M = 1000000007
 
# function to product the factors
def multiplyFactors(n) :
    prod = 1
     
    i = 1
    while i * i <= n :
        if (n % i == 0) :
             
            # If factors are equal,
            # multiply only once
            if (n / i == i) :
                prod = (prod * i) % M
                 
            #Otherwise multiply both
            else :
                prod = (prod * i) % M
                prod = (prod * n / i) % M
        i = i + 1
 
    return prod
 
# Driver Code
 
n = 12
print (multiplyFactors(n))
 
 
# This code is contributed by Nikita Tiwari.

C#

//C# program to calculate product
// of factors of number
using System;
 
class GFG
{
public static long M = 1000000007;
 
    // function to product the factors
    static long multiplyFactors(int n)
    {
        long prod = 1;
        for (int i = 1; i * i <= n; i++)
        {
            if (n % i == 0)
            {
 
                // If factors are equal,
                // multiply only once
                if (n / i == i)
                    prod = (prod * i) % M;
 
                // Otherwise multiply both
                else {
                    prod = (prod * i) % M;
                    prod = (prod * n / i) % M;
                }
            }
        }
        return prod;
    }
 
    // Driver Code
    public static void Main()
    {
        int n = 12;
        Console.Write(multiplyFactors(n));
    }
}
 
// This code is contributed by nitin mittal.

PHP

<?php
// PHP program to calculate product
// of factors of number
 
$M = 1000000007;
 
// function to product the factors
function multiplyFactors( $n)
{
    global $M;
    $prod = 1;
    for($i = 1; $i * $i <= $n; $i++)
    {
        if ($n % $i == 0)
        {
             
            // If factors are equal,
            // multiply only once
            if ($n / $i == $i)
                $prod = ($prod * $i) % $M;
 
            // Otherwise multiply both
            else
            {
                $prod = ($prod * $i) % $M;
                $prod = ($prod * $n / $i) % $M;
            }
        }
    }
    return $prod;
}
 
    // Driver Code
    $n = 12;
    echo multiplyFactors($n);
 
// This code is contributed by anuj_67.
?>

Javascript

<script>
 
// JavaScript program to calculate product
// of factors of number
 
// function to product the factors
function multiplyFactors( n)
{
    let M = 1000000007;
    let i;
    prod = 1;
    for(i = 1; i * i <= n; i++)
    {
        if (n % i == 0)
        {
             
            // If factors are equal,
            // multiply only once
            if (n / i == i)
                prod = (prod * i) % M;
 
            // Otherwise multiply both
            else
            {
                prod = (prod * i) % M;
                prod = (prod * n / i) % M;
            }
        }
    }
    return prod;
}
 
    // Driver Code
    n = 12;
    document.write(multiplyFactors(n));
 
// This code is contributed by sravan
 
</script>

Producción : 
 

1728

Complejidad temporal: O(√n) 
Espacio auxiliar: O(1)

Método 3 (Otro Enfoque): 
Observemos una cosa:
 

All factors of 12 are: 1, 2, 3, 4, 6, 12
1 * 2 * 3 * (2*2) * (2*3) * (2*2*3) = 2^6 * 3^3 = 12^3
and number of factors are 6

Entonces podemos observar que el producto de factores será n^(número de factor/2). Pero cuando el número de factor es impar (lo que significa que el número es un cuadrado perfecto), en ese caso el producto será n^(número de factor/2) * sqrt(n). Podemos contar el número de factores similares al enfoque anterior. Y podemos calcular la potencia de manera eficiente usando Exponenciación Modular
 

C++

// C++ program to calculate product
// of factors of number
#include <bits/stdc++.h>
#define M 1000000007
using namespace std;
 
// Iterative Function to calculate
// (x^y) in O(log y)
long long power(long long x, long long y)
{
    long long res = 1;
 
    while (y > 0)
    {
        if (y & 1)
            res = (res * x) % M;
        y = (y >> 1) % M;
        x = (x * x) % M;
    }
    return res;
}
 
// function to count the factors
int countFactors(int n)
{
    int count = 0;
    for (int i = 1; i * i <= n; i++)
    {
        if (n % i == 0)
        {
 
            // If factors are equal,
            // count only once
            if (n / i == i)
                count++;
 
            // Otherwise count both
            else
                count += 2;
        }
    }
    return count;
}
 
long long multiplyFactors(int n)
{
    int numFactor = countFactors(n);
 
    // Calculate product of factors
    long long product = power(n, numFactor / 2);
 
    // If numFactor is odd return
    // power(n, numFactor/2) * sqrt(n)
    if (numFactor & 1)
        product = (product * (int)sqrt(n)) % M;
 
    return product;
}
 
// Driver code
int main()
{
    int n = 12;
    cout << multiplyFactors(n) << endl;
    return 0;
}

Java

// Java program to calculate product
// of factors of number
class GFG
{
public static final long M = 1000000007;
 
    // Iterative Function to calculate
    // (x^y) in O(log y)
    static long power(long x, long y)
    {
        long res = 1;
 
        while (y > 0)
        {
            if (y % 2 == 1)
                res = (res * x) % M;
            y = (y >> 1) % M;
            x = (x * x) % M;
        }
        return res;
    }
 
    // function to count the factors
    static int countFactors(int n)
    {
        int count = 0;
        for (int i = 1; i * i <= n; i++)
        {
            if (n % i == 0)
            {
 
                // If factors are equal,
                // count only once
                if (n / i == i)
                    count++;
 
                // Otherwise count both
                else
                    count += 2;
            }
        }
        return count;
    }
 
    static long multiplyFactors(int n)
    {
        int numFactor = countFactors(n);
 
        // Calculate product of factors
        long product = power(n, numFactor / 2);
 
        // If numFactor is odd return
        // power(n, numFactor/2) * sqrt(n)
        if (numFactor % 2 == 1)
            product = (product * (int)Math.sqrt(n)) % M;
 
        return product;
    }
 
    // Driver Code
    public static void main(String[] args)
    {
        int n = 12;
        System.out.println(multiplyFactors(n));
    }
}

Python

# Python program to calculate product
# of factors of number
 
M = 1000000007
 
# Iterative Function to calculate
# (x^y) in O(log y)
def power(x, y) :
     
    res = 1
    while (y > 0) :
         
        if (y % 2 == 1) :
            res = (res * x) % M
        y = (y >> 1) % M
        x = (x * x) % M
         
    return res
     
# function to count the factors
def countFactors(n) :
    count = 0
    i = 1
    while i * i <= n :
        if (n % i == 0) :
            # If factors are equal,
            # count only once
            if (n / i == i) :
                count = count + 1
             
            # Otherwise count both
            else :
                count = count + 2
        i = i + 1
    return count
     
def multiplyFactors(n) :
     
    numFactor = countFactors(n)
     
    # Calculate product of factors
    product = power(n, numFactor / 2)
 
    # If numFactor is odd return
    # power(n, numFactor/2) * sqrt(n)
    if (numFactor % 2 == 1) :
        product = (product *
                (int)(math.sqrt(n))) % M
 
    return product
     
# Driver Code
n = 12
print multiplyFactors(n)
 
# This code is contributed by Nikita Tiwari.

C#

// C# program to calculate product
// of factors of number
using System;
 
class GFG {
     
    public static long M = 1000000007;
 
    // Iterative Function to calculate
    // (x^y) in O(log y)
    static long power(long x, long y)
    {
        long res = 1;
 
        while (y > 0)
        {
            if (y % 2 == 1)
                res = (res * x) % M;
            y = (y >> 1) % M;
            x = (x * x) % M;
        }
        return res;
    }
 
    // function to count the factors
    static int countFactors(int n)
    {
        int count = 0;
        for (int i = 1; i * i <= n; i++)
        {
            if (n % i == 0)
            {
 
                // If factors are equal,
                // count only once
                if (n / i == i)
                    count++;
 
                // Otherwise count both
                else
                    count += 2;
            }
        }
         
        return count;
    }
 
    static long multiplyFactors(int n)
    {
        int numFactor = countFactors(n);
 
        // Calculate product of factors
        long product = power(n, numFactor / 2);
 
        // If numFactor is odd return
        // power(n, numFactor/2) * sqrt(n)
        if (numFactor % 2 == 1)
            product = (product *
                       (int)Math.Sqrt(n)) % M;
 
        return product;
    }
 
    // Driver Code
    public static void Main()
    {
        int n = 12;
        Console.Write(multiplyFactors(n));
    }
}
 
// This code is contributed by nitin mittal

PHP

<?php
// PHP program to calculate product
// of factors of number
 
$M = 1000000007;
 
// Iterative Function to calculate
// (x^y) in O(log y)
function power( $x, $y)
{
    global $M;
    $res = 1;
 
    while ($y > 0)
    {
        if ($y & 1)
            $res = ($res * $x) % $M;
        $y = ($y >> 1) % $M;
        $x = ($x *$x) % $M;
    }
    return $res;
}
 
// function to count the factors
function countFactors( $n)
{
    $count = 0;
    for ($i = 1; $i * $i <= $n; $i++)
    {
        if ($n % $i == 0)
        {
 
            // If factors are equal,
            // count only once
            if ($n / $i == $i)
                $count++;
 
            // Otherwise count both
            else
                $count += 2;
        }
    }
    return $count;
}
 
function multiplyFactors( $n)
{
    $numFactor = countFactors($n);
 
    // Calculate product of factors
    $product = power($n, $numFactor / 2);
 
    // If numFactor is odd return
    // power(n, numFactor/2) * sqrt(n)
    if ($numFactor & 1)
        $product = ($product * sqrt($n)) % $M;
 
    return $product;
}
 
    // Driver code
    $n = 12;
    echo multiplyFactors($n);
     
// This code is contributed by anuj_67.
?>

Javascript

<script>
// Javascript program to calculate product
// of factors of number
 
let M = 1000000007;
  
    // Iterative Function to calculate
    // (x^y) in O(log y)
    function power(x, y)
    {
        let res = 1;
  
        while (y > 0)
        {
            if (y % 2 == 1)
                res = (res * x) % M;
            y = (y >> 1) % M;
            x = (x * x) % M;
        }
        return res;
    }
  
    // function to count the factors
    function countFactors(n)
    {
        let count = 0;
        for (let i = 1; i * i <= n; i++)
        {
            if (n % i == 0)
            {
  
                // If factors are equal,
                // count only once
                if (n / i == i)
                    count++;
  
                // Otherwise count both
                else
                    count += 2;
            }
        }
        return count;
    }
  
    function multiplyFactors(n)
    {
        let numFactor = countFactors(n);
  
        // Calculate product of factors
        let product = power(n, numFactor / 2);
  
        // If numFactor is odd return
        // power(n, numFactor/2) * sqrt(n)
        if (numFactor % 2 == 1)
            product = (product * Math.sqrt(n)) % M;
  
        return product;
    }
   
// driver function
 
        let n = 12;
        document.write(multiplyFactors(n));
   
</script>   

Producción : 
 

1728

Complejidad temporal: O(√n) 
Espacio auxiliar: O(1)

Este artículo es una contribución de Aarti_Rathi y nuclode . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
 

Publicación traducida automáticamente

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