Given a number n, find the product of all factors of n. Since the product can be very large answer it modulo 10^9 + 7.
Examples :
Input : 12 Output : 1728 1 * 2 * 3 * 4 * 6 * 12 = 1728 Input : 18 Output : 5832 1 * 2 * 3 * 6 * 9 * 18 = 5832
Method 1(Naive Approach):
We can run loop for i from 1 to n and if n is divisible by i multiply the numbers. Time complexity for this solution will be O(n).
But this approach is insufficient for large value of n.
Method 2(Better Approach):
A better approach is to run loop for i from 1 to sqrt(n). If number is divisible by i multiply it with i and n/i.
Time complexity of this solution will be O(sqrt(n)).
// 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 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 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# 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 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. ?> |
<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> |
Output :
1728
Time Complexity: O(?n)
Auxiliary Space: O(1)
Method 3 (Another Approach):
Let us observe a thing:
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
So we can observe that product of factors will be n^(number of factor/2). But when number of factor is odd (which means the number is perfect square) in that case product will be n^(number of factor/2) * sqrt(n). We can count number of factors similar to approach above. And we can calculate power efficiently using Modular Exponentiation
// 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 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 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# 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 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. ?> |
<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> |
Output :
1728
Time Complexity: O(?n)
Auxiliary Space: O(1)