Product of factors of number
Last Updated :
23 Jun, 2022
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++
#include <bits/stdc++.h>
#define M 1000000007
using namespace std;
long long multiplyFactors( int n)
{
long long prod = 1;
for ( int i = 1; i * i <= n; i++)
{
if (n % i == 0)
{
if (n / i == i)
prod = (prod * i) % M;
else {
prod = (prod * i) % M;
prod = (prod * n / i) % M;
}
}
}
return prod;
}
int main()
{
int n = 12;
cout << multiplyFactors(n) << endl;
return 0;
}
|
Java
class GFG
{
public static final long M = 1000000007 ;
static long multiplyFactors( int n)
{
long prod = 1 ;
for ( int i = 1 ; i * i <= n; i++)
{
if (n % i == 0 )
{
if (n / i == i)
prod = (prod * i) % M;
else {
prod = (prod * i) % M;
prod = (prod * n / i) % M;
}
}
}
return prod;
}
public static void main(String[] args)
{
int n = 12 ;
System.out.println(multiplyFactors(n));
}
}
|
Python
M = 1000000007
def multiplyFactors(n) :
prod = 1
i = 1
while i * i < = n :
if (n % i = = 0 ) :
if (n / i = = i) :
prod = (prod * i) % M
else :
prod = (prod * i) % M
prod = (prod * n / i) % M
i = i + 1
return prod
n = 12
print (multiplyFactors(n))
|
C#
using System;
class GFG
{
public static long M = 1000000007;
static long multiplyFactors( int n)
{
long prod = 1;
for ( int i = 1; i * i <= n; i++)
{
if (n % i == 0)
{
if (n / i == i)
prod = (prod * i) % M;
else {
prod = (prod * i) % M;
prod = (prod * n / i) % M;
}
}
}
return prod;
}
public static void Main()
{
int n = 12;
Console.Write(multiplyFactors(n));
}
}
|
PHP
<?php
$M = 1000000007;
function multiplyFactors( $n )
{
global $M ;
$prod = 1;
for ( $i = 1; $i * $i <= $n ; $i ++)
{
if ( $n % $i == 0)
{
if ( $n / $i == $i )
$prod = ( $prod * $i ) % $M ;
else
{
$prod = ( $prod * $i ) % $M ;
$prod = ( $prod * $n / $i ) % $M ;
}
}
}
return $prod ;
}
$n = 12;
echo multiplyFactors( $n );
?>
|
Javascript
<script>
function multiplyFactors( n)
{
let M = 1000000007;
let i;
prod = 1;
for (i = 1; i * i <= n; i++)
{
if (n % i == 0)
{
if (n / i == i)
prod = (prod * i) % M;
else
{
prod = (prod * i) % M;
prod = (prod * n / i) % M;
}
}
}
return prod;
}
n = 12;
document.write(multiplyFactors(n));
</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++
#include <bits/stdc++.h>
#define M 1000000007
using namespace std;
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;
}
int countFactors( int n)
{
int count = 0;
for ( int i = 1; i * i <= n; i++)
{
if (n % i == 0)
{
if (n / i == i)
count++;
else
count += 2;
}
}
return count;
}
long long multiplyFactors( int n)
{
int numFactor = countFactors(n);
long long product = power(n, numFactor / 2);
if (numFactor & 1)
product = (product * ( int ) sqrt (n)) % M;
return product;
}
int main()
{
int n = 12;
cout << multiplyFactors(n) << endl;
return 0;
}
|
Java
class GFG
{
public static final long M = 1000000007 ;
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;
}
static int countFactors( int n)
{
int count = 0 ;
for ( int i = 1 ; i * i <= n; i++)
{
if (n % i == 0 )
{
if (n / i == i)
count++;
else
count += 2 ;
}
}
return count;
}
static long multiplyFactors( int n)
{
int numFactor = countFactors(n);
long product = power(n, numFactor / 2 );
if (numFactor % 2 == 1 )
product = (product * ( int )Math.sqrt(n)) % M;
return product;
}
public static void main(String[] args)
{
int n = 12 ;
System.out.println(multiplyFactors(n));
}
}
|
Python
M = 1000000007
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
def countFactors(n) :
count = 0
i = 1
while i * i < = n :
if (n % i = = 0 ) :
if (n / i = = i) :
count = count + 1
else :
count = count + 2
i = i + 1
return count
def multiplyFactors(n) :
numFactor = countFactors(n)
product = power(n, numFactor / 2 )
if (numFactor % 2 = = 1 ) :
product = (product *
( int )(math.sqrt(n))) % M
return product
n = 12
print multiplyFactors(n)
|
C#
using System;
class GFG {
public static long M = 1000000007;
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;
}
static int countFactors( int n)
{
int count = 0;
for ( int i = 1; i * i <= n; i++)
{
if (n % i == 0)
{
if (n / i == i)
count++;
else
count += 2;
}
}
return count;
}
static long multiplyFactors( int n)
{
int numFactor = countFactors(n);
long product = power(n, numFactor / 2);
if (numFactor % 2 == 1)
product = (product *
( int )Math.Sqrt(n)) % M;
return product;
}
public static void Main()
{
int n = 12;
Console.Write(multiplyFactors(n));
}
}
|
PHP
<?php
$M = 1000000007;
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 countFactors( $n )
{
$count = 0;
for ( $i = 1; $i * $i <= $n ; $i ++)
{
if ( $n % $i == 0)
{
if ( $n / $i == $i )
$count ++;
else
$count += 2;
}
}
return $count ;
}
function multiplyFactors( $n )
{
$numFactor = countFactors( $n );
$product = power( $n , $numFactor / 2);
if ( $numFactor & 1)
$product = ( $product * sqrt( $n )) % $M ;
return $product ;
}
$n = 12;
echo multiplyFactors( $n );
?>
|
Javascript
<script>
let M = 1000000007;
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 countFactors(n)
{
let count = 0;
for (let i = 1; i * i <= n; i++)
{
if (n % i == 0)
{
if (n / i == i)
count++;
else
count += 2;
}
}
return count;
}
function multiplyFactors(n)
{
let numFactor = countFactors(n);
let product = power(n, numFactor / 2);
if (numFactor % 2 == 1)
product = (product * Math.sqrt(n)) % M;
return product;
}
let n = 12;
document.write(multiplyFactors(n));
</script>
|
Output :
1728
Time Complexity: O(?n)
Auxiliary Space: O(1)
Share your thoughts in the comments
Please Login to comment...