Given an integer N. The task is to find the number of divisors of all the numbers in the range [1, N].
Examples:
Input: N = 5
Output: 1 2 2 3 2
divisors(1) = 1
divisors(2) = 1 and 2
divisors(3) = 1 and 3
divisors(4) = 1, 2 and 4
divisors(5) = 1 and 5Input: N = 10
Output: 1 2 2 3 2 4 2 4 3 4
Approach: Create an array arr[] of the size (N + 1) where arr[i] stores the number of divisors of i. Now for every j from the range [1, N], increment all the elements which are divisible by j.
For example, if j = 3 then update arr[3], arr[6], arr[9], …
Below is the implementation of the above approach:
// C++ implementation of the approach #include <bits/stdc++.h> using namespace std;
// Function to find the number of divisors // of all numbers in the range [1, n] void findDivisors( int n)
{ // Array to store the count
// of divisors
int div [n + 1];
memset ( div , 0, sizeof div );
// For every number from 1 to n
for ( int i = 1; i <= n; i++) {
// Increase divisors count for
// every number divisible by i
for ( int j = 1; j * i <= n; j++)
div [i * j]++;
}
// Print the divisors
for ( int i = 1; i <= n; i++)
cout << div [i] << " " ;
} // Driver code int main()
{ int n = 10;
findDivisors(n);
return 0;
} |
// Java implementation of the approach class GFG
{ // Function to find the number of divisors
// of all numbers in the range [1, n]
static void findDivisors( int n)
{
// Array to store the count
// of divisors
int [] div = new int [n + 1 ];
// For every number from 1 to n
for ( int i = 1 ; i <= n; i++)
{
// Increase divisors count for
// every number divisible by i
for ( int j = 1 ; j * i <= n; j++)
div[i * j]++;
}
// Print the divisors
for ( int i = 1 ; i <= n; i++)
System.out.print(div[i]+ " " );
}
// Driver code
public static void main(String args[])
{
int n = 10 ;
findDivisors(n);
}
} // This code is contributed by Ryuga |
# Python3 implementation of the approach # Function to find the number of divisors # of all numbers in the range [1,n] def findDivisors(n):
# List to store the count
# of divisors
div = [ 0 for i in range (n + 1 )]
# For every number from 1 to n
for i in range ( 1 , n + 1 ):
# Increase divisors count for
# every number divisible by i
for j in range ( 1 , n + 1 ):
if j * i < = n:
div[i * j] + = 1
# Print the divisors
for i in range ( 1 , n + 1 ):
print (div[i], end = " " )
# Driver Code if __name__ = = "__main__" :
n = 10
findDivisors(n)
# This code is contributed by # Vivek Kumar Singh |
// C# implementation of the approach using System;
class GFG
{ // Function to find the number of divisors // of all numbers in the range [1, n] static void findDivisors( int n)
{ // Array to store the count
// of divisors
int [] div = new int [n + 1];
// For every number from 1 to n
for ( int i = 1; i <= n; i++)
{
// Increase divisors count for
// every number divisible by i
for ( int j = 1; j * i <= n; j++)
div[i * j]++;
}
// Print the divisors
for ( int i = 1; i <= n; i++)
Console.Write(div[i]+ " " );
} // Driver code static void Main()
{ int n = 10;
findDivisors(n);
} } // This code is contributed by mits |
<?php // PHP implementation of the approach // Function to find the number of divisors // of all numbers in the range [1, n] function findDivisors( $n )
{ // Array to store the count
// of divisors
$div = array_fill (0, $n + 2, 0);
// For every number from 1 to n
for ( $i = 1; $i <= $n ; $i ++)
{
// Increase divisors count for
// every number divisible by i
for ( $j = 1; $j * $i <= $n ; $j ++)
$div [ $i * $j ]++;
}
// Print the divisors
for ( $i = 1; $i <= $n ; $i ++)
echo $div [ $i ], " " ;
} // Driver code $n = 10;
findDivisors( $n );
// This code is contributed // by Arnab Kundu ?> |
<script> // Javascript implementation of the approach // Function to find the number of divisors // of all numbers in the range [1, n] function findDivisors(n)
{ // Array to store the count
// of divisors
let div = new Array(n + 1).fill(0);
// For every number from 1 to n
for (let i = 1; i <= n; i++)
{
// Increase divisors count for
// every number divisible by i
for (let j = 1; j * i <= n; j++)
div[i * j]++;
}
// Print the divisors
for (let i = 1; i <= n; i++)
document.write(div[i] + " " );
} // Driver code let n = 10; findDivisors(n); // This code is contributed by souravmahato348 </script> |
1 2 2 3 2 4 2 4 3 4
Time Complexity: O(n3/2)
Auxiliary Space: O(n)