Find the sum of the number of divisors
Last Updated :
08 Jun, 2022
Given three integers A, B, C, the task is to find
?Ai=1 ?Bj=1?Ck=1 d(i.j.k), where d(x) is the number of divisors of x. Answer can be very large, So, print answer modulo 109+7.
Examples:
Input: A = 2, B = 2, c = 2
Output: 20
Explanation: d(1.1.1) = d(1) = 1;
d(1·1·2) = d(2) = 2;
d(1·2·1) = d(2) = 2;
d(1·2·2) = d(4) = 3;
d(2·1·1) = d(2) = 2;
d(2·1·2) = d(4) = 3;
d(2·2·1) = d(4) = 3;
d(2·2·2) = d(8) = 4.
Input: A = 5, B = 6, C = 7
Output: 1520
Approach:
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
#define N 100005
#define mod 1000000007
int cnt[N];
void Divisors()
{
memset (cnt, 0, sizeof cnt);
for ( int i = 1; i < N; i++) {
for ( int j = 1; j * i < N; j++)
cnt[i * j]++;
}
}
int Sumofdivisors( int A, int B, int C)
{
int sum = 0;
Divisors();
for ( int i = 1; i <= A; i++) {
for ( int j = 1; j <= B; j++) {
for ( int k = 1; k <= C; k++) {
int x = i * j * k;
sum += cnt[x];
if (sum >= mod)
sum -= mod;
}
}
}
return sum;
}
int main()
{
int A = 5, B = 6, C = 7;
cout << Sumofdivisors(A, B, C);
return 0;
}
|
Java
class GFG
{
static int N = 100005 ;
static int mod = 1000000007 ;
static int cnt[] = new int [N];
static void Divisors()
{
for ( int i = 1 ; i < N; i++)
{
for ( int j = 1 ; j * i < N; j++)
{
cnt[i * j]++;
}
}
}
static int Sumofdivisors( int A, int B, int C)
{
int sum = 0 ;
Divisors();
for ( int i = 1 ; i <= A; i++)
{
for ( int j = 1 ; j <= B; j++)
{
for ( int k = 1 ; k <= C; k++)
{
int x = i * j * k;
sum += cnt[x];
if (sum >= mod)
{
sum -= mod;
}
}
}
}
return sum;
}
public static void main(String[] args)
{
int A = 5 , B = 6 , C = 7 ;
System.out.println(Sumofdivisors(A, B, C));
}
}
|
Python3
N = 100005
mod = 1000000007
cnt = [ 0 ] * N;
def Divisors() :
for i in range ( 1 , N) :
for j in range ( 1 , N / / i) :
cnt[i * j] + = 1 ;
def Sumofdivisors(A, B, C) :
sum = 0 ;
Divisors();
for i in range ( 1 ,A + 1 ) :
for j in range ( 1 , B + 1 ) :
for k in range ( 1 , C + 1 ) :
x = i * j * k;
sum + = cnt[x];
if ( sum > = mod) :
sum - = mod;
return sum ;
if __name__ = = "__main__" :
A = 5 ; B = 6 ; C = 7 ;
print (Sumofdivisors(A, B, C));
|
C#
using System;
class GFG
{
static int N = 100005;
static int mod = 1000000007;
static int []cnt = new int [N];
static void Divisors()
{
for ( int i = 1; i < N; i++)
{
for ( int j = 1; j * i < N; j++)
{
cnt[i * j]++;
}
}
}
static int Sumofdivisors( int A, int B, int C)
{
int sum = 0;
Divisors();
for ( int i = 1; i <= A; i++)
{
for ( int j = 1; j <= B; j++)
{
for ( int k = 1; k <= C; k++)
{
int x = i * j * k;
sum += cnt[x];
if (sum >= mod)
{
sum -= mod;
}
}
}
}
return sum;
}
public static void Main(String[] args)
{
int A = 5, B = 6, C = 7;
Console.WriteLine(Sumofdivisors(A, B, C));
}
}
|
Javascript
<script>
let N = 100005;
let mod = 1000000007;
let cnt = new Array(N);
cnt.fill(0);
function Divisors()
{
for (let i = 1; i < N; i++)
{
for (let j = 1; j * i < N; j++)
{
cnt[i * j]++;
}
}
}
function Sumofdivisors(A, B, C)
{
let sum = 0;
Divisors();
for (let i = 1; i <= A; i++)
{
for (let j = 1; j <= B; j++)
{
for (let k = 1; k <= C; k++)
{
let x = i * j * k;
sum += cnt[x];
if (sum >= mod)
{
sum -= mod;
}
}
}
}
return sum;
}
let A = 5, B = 6, C = 7;
document.write(Sumofdivisors(A, B, C));
</script>
|
Time Complexity: O((A * B * C) + N3/2)
Auxiliary Space: O(N)
Share your thoughts in the comments
Please Login to comment...