Open In App

Find the number of divisors of all numbers in the range [1, n]

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 5

Input: 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>

Output: 
1 2 2 3 2 4 2 4 3 4

 

Time Complexity: O(n3/2)
Auxiliary Space: O(n)


Article Tags :