Open In App

Find all divisors of first N natural numbers

Last Updated : 03 Feb, 2023
Improve
Improve
Like Article
Like
Save
Share
Report

Given an integer N, the task is to find all the divisors of numbers from 1 to N.
Note: 1 ? N ? 100000 

Examples:

Input: N = 2 
Output: 
1 –>1 
2 –>1, 2

Input: N = 5 
Output: 
1 –>1 
2 –>1, 2 
3 –>1, 3 
4 –>1, 2, 4 
5 –>1, 5

Naive Approach:

  • Iterate over first N natural numbers using a loop variable (say i)
  • Iterate over the natural numbers from 1 to i with a loop variable (say j) and check that i % j == 0. Then j is a divisor of the natural number i.

Below is the implementation of the above approach:

C++




// C++ implementation to find all
// the divisors of the first N
// natural numbers
 
#include <bits/stdc++.h>
 
using namespace std;
 
// Function to find the divisors
// of the first N natural numbers
void factors(int n)
{
    int i, j;
    cout << "1 -->1\n";
     
    // Loop to find the divisors
    for (i = 2; i <= n; i++) {
        cout << i << " -->";
        for (j = 1; j <= i / 2; j++) {
            if (i % j == 0)
                cout << j << ", ";
        }
        cout << i << "\n";
    }
}
 
// Driver Code
int main()
{
    int n = 5;
    factors(n);
}


Java




// Java implementation to find all
// the divisors of the first N
// natural numbers
import java.io.*;
public class GFG{
 
// Function to find the divisors
// of the first N natural numbers
static void factors(int n)
{
    int i, j;
    System.out.print("1 -->1\n");
     
    // Loop to find the divisors
    for(i = 2; i <= n; i++)
    {
       System.out.print(i + " -->");
       for(j = 1; j <= i / 2; j++)
       {
          if (i % j == 0)
              System.out.print(j + ", ");
       }
       System.out.print(i + "\n");
    }
}
 
// Driver Code
public static void main(String[] args)
{
    int n = 5;
    factors(n);
}
}
 
// This code is contributed by Rohit_ranjan


Python3




# Python3 implementation to find all
# the divisors of the first N
# natural numbers
 
# Function to find the divisors
# of the first N natural numbers
def factors(n):
 
    i = 0; j = 0;
    print("1 -->1");
     
    # Loop to find the divisors
    for i in range(2, n + 1):
        print(i, "-->", end = "");
        for j in range(1, (i // 2) + 1):
            if (i % j == 0):
                print(j, ",", end = "");
         
        print(i, end = "\n");
     
# Driver Code
n = 5;
factors(n);
 
# This code is contributed by Code_Mech


C#




// C# implementation to find all
// the divisors of the first N
// natural numbers
using System;
class GFG{
 
// Function to find the divisors
// of the first N natural numbers
static void factors(int n)
{
    int i, j;
    Console.Write("1 -->1\n");
     
    // Loop to find the divisors
    for(i = 2; i <= n; i++)
    {
        Console.Write(i + " -->");
        for(j = 1; j <= i / 2; j++)
        {
            if (i % j == 0)
                Console.Write(j + ", ");
        }
        Console.Write(i + "\n");
    }
}
 
// Driver Code
public static void Main()
{
    int n = 5;
    factors(n);
}
}
 
// This code is contributed by Nidhi_biet


Javascript




<script>
 
// JavaScript implementation to find all
// the divisors of the first N
// natural numbers
 
// Function to find the divisors
// of the first N natural numbers
function factors(n)
{
    let i, j;
    document.write("1 -->1<br>");
     
    // Loop to find the divisors
    for (i = 2; i <= n; i++) {
        document.write(i + " -->");
        for (j = 1; j <= parseInt(i / 2); j++) {
            if (i % j == 0)
                document.write(j + ", ");
        }
        document.write(i + "<br>");
    }
}
 
// Driver Code
let n = 5;
factors(n);
 
</script>


Output: 

1 -->1
2 -->1, 2
3 -->1, 3
4 -->1, 2, 4
5 -->1, 5

Time Complexity: O(N2)
Auxiliary Space: O(1)

Better Approach:

  • Iterate over the first N natural numbers using a loop variable.
  • For the number to find its divisors iterate from 2 to that number and check any one of them is a divisor of the given number.

Below is the implementation of the above approach:

C++




// C++ implementation to find all
// the divisors of the first
// N natural numbers
 
#include <bits/stdc++.h>
 
using namespace std;
 
// Function to find the factors of
// the numbers from 1 to N
void factors(int n)
{
    int i, j;
    cout << "1 -->1\n";
     
    // Loop to find the factors
    // of the first N natural
    // numbers of the integer
    for (i = 2; i <= n; i++) {
        cout << i << " -->";
        for (j = 1; j * j <= i; j++) {
            if (i % j == 0){
                cout << j << ", ";
                if (i / j != j)
                cout << i/j << ", ";
            }
        }
        cout << "\n";
    }
}
 
// Driver Code
int main()
{
    int n = 5;
    factors(n);
}


Java




// Java implementation to find all
// the divisors of the first
// N natural numbers
import java.util.*;
class GFG{
 
// Function to find the factors of
// the numbers from 1 to N
static void factors(int n)
{
    int i, j;
    System.out.print("1 -->1\n");
     
    // Loop to find the factors
    // of the first N natural
    // numbers of the integer
    for (i = 2; i <= n; i++)
    {
        System.out.print(i + " -->");
        for (j = 1; j * j <= i; j++)
        {
            if (i % j == 0)
            {
                System.out.print(j + ", ");
                if (i / j != j)
                    System.out.print(i / j + ", ");
            }
        }
        System.out.print("\n");
    }
}
 
// Driver Code
public static void main(String args[])
{
    int n = 5;
    factors(n);
}
}
 
// This code is contributed by Code_Mech


Python3




# Python3 implementation to find all
# the divisors of the first
# N natural numbers
 
# Function to find the factors of
# the numbers from 1 to N
def factors(n):
     
    print("1 -->1");
 
    # Loop to find the factors
    # of the first N natural
    # numbers of the integer
    for i in range(2, n + 1):
        print(i, " -->", end = "");
         
        for j in range(1, int(pow(i, 1))):
            if (i % j == 0):
                print(j, ", ", end = "");
                 
                if (i // j != j):
                    print(i // j, ", ", end = "");
             
        print(end = "\n");
     
# Driver Code
if __name__ == '__main__':
     
    n = 5;
    factors(n);
 
# This code is contributed by gauravrajput1


C#




// C# implementation to find all
// the divisors of the first
// N natural numbers
using System;
class GFG{
 
// Function to find the factors of
// the numbers from 1 to N
static void factors(int n)
{
    int i, j;
    Console.Write("1 -->1\n");
     
    // Loop to find the factors
    // of the first N natural
    // numbers of the integer
    for (i = 2; i <= n; i++)
    {
        Console.Write(i + " -->");
        for (j = 1; j * j <= i; j++)
        {
            if (i % j == 0)
            {
                Console.Write(j + ", ");
                if (i / j != j)
                    Console.Write(i / j + ", ");
            }
        }
        Console.Write("\n");
    }
}
 
// Driver Code
public static void Main()
{
    int n = 5;
    factors(n);
}
}
 
// This code is contributed by Code_Mech


Javascript




<script>
 
// Javascript implementation to find all
// the divisors of the first
// N natural numbers
 
// Function to find the factors of
// the numbers from 1 to N
function factors(n)
{
    let i, j;
    document.write("1 -->1<br>");
     
    // Loop to find the factors
    // of the first N natural
    // numbers of the integer
    for(i = 2; i <= n; i++)
    {
        document.write(i + " -->");
        for(j = 1; j * j <= i; j++)
        {
            if (i % j == 0)
            {
                document.write(j + ", ");
                 
                if (parseInt(i / j) != j)
                    document.write(parseInt(i/j) + ", ");
            }
        }
        document.write("<br>");
    }
}
 
// Driver Code
let n = 5;
factors(n);
 
// This code is contributed by subhammahato348
 
</script>


Output: 

1 -->1
2 -->1, 2, 
3 -->1, 3, 
4 -->1, 4, 2, 
5 -->1, 5, 

 

Time Complexity: O(N*sqrt(N)) 
Auxiliary Space: O(1)

As constant extra space is used.

Efficient Approach: The idea is to precompute the factors of the numbers with the help of the Sieve of Eratosthenes. Then finally iterate over the first N natural numbers to find the factors.

Below is the implementation of the above approach:

C++




// C++ implementation to find the
// factors of first N natural
// numbers
 
#include <bits/stdc++.h>
 
using namespace std;
 
const int MAX = 1e5;
   
// Initialize global divisor vector
// array of sequence container
vector<int> divisor[MAX + 1];
 
// Calculate all
// divisors of number
void sieve()
{
    for (int i = 1; i <= MAX; ++i) {
        for (int j = i; j <= MAX; j += i)
            divisor[j].push_back(i);
    }
}
 
// Function to find the
// factors of first n
// natural numbers
void findNFactors(int n){
    for(int i = 1; i <= n; i++){
        cout << i << "-->";
        for (auto &divi: divisor[i]){
            cout << divi << ", ";
        }
        cout << "\n";
    }
}
 
// Driver Code
int main()
{
    int n = 5;
    sieve();
     
    // Function Call
    findNFactors(n);
}


Java




// Java implementation to find the
// factors of first N natural
// numbers
import java.util.*;
class GFG{
 
static int MAX = (int) 1e5;
   
// Initialize global divisor vector
// array of sequence container
static Vector<Integer> []divisor = new Vector[MAX + 1];
 
// Calculate all
// divisors of number
static void sieve()
{
    for (int i = 1; i <= MAX; ++i)
    {
        for (int j = i; j <= MAX; j += i)
            divisor[j].add(i);
    }
}
 
// Function to find the
// factors of first n
// natural numbers
static void findNFactors(int n)
{
    for(int i = 1; i <= n; i++)
    {
        System.out.print(i+ "-->");
        for (int divi: divisor[i])
        {
            System.out.print(divi+ ", ");
        }
        System.out.print("\n");
    }
}
 
// Driver Code
public static void main(String[] args)
{
    int n = 5;
    for (int i = 0; i < divisor.length; i++)
        divisor[i] = new Vector<Integer>();
    sieve();
     
    // Function Call
    findNFactors(n);
}
}
 
// This code is contributed by Princi Singh


Python3




# Python3 program to find the factors
# of first N natural numbers
MAX = 100001
 
# Initialize divisor list(array)
# of sequence container
divisor = [[] for x in range(MAX)]
 
# Calculate all divisors of a number
def sieve():
 
    for i in range(1, MAX):
        for j in range(i, MAX, i):
            divisor[j].append(i)
 
# Function to find the factors of
# first n natural numbers
def findNFactors (n):
 
    for i in range(1, n + 1):
        print(i, " --> ", end = '')
         
        for divi in divisor[i]:
            print(divi, ", ", end = '')
        print()
 
# Driver code
if __name__ == '__main__':
 
    n = 5
    sieve()
 
    # Function call
    findNFactors(n)
 
# This code is contributed by himanshu77


C#




// C# implementation to find the
// factors of first N natural
// numbers
using System;
using System.Collections.Generic;
  
public class GFG{
  
static int MAX = (int) 1e5;
    
// Initialize global divisor vector
// array of sequence container
static List<int> []divisor = new List<int>[MAX + 1];
  
// Calculate all
// divisors of number
static void sieve()
{
    for (int i = 1; i <= MAX; ++i)
    {
        for (int j = i; j <= MAX; j += i)
            divisor[j].Add(i);
    }
}
  
// Function to find the
// factors of first n
// natural numbers
static void findNFactors(int n)
{
    for(int i = 1; i <= n; i++)
    {
        Console.Write(i+ "-->");
        foreach (int divi in divisor[i])
        {
            Console.Write(divi+ ", ");
        }
        Console.Write("\n");
    }
}
  
// Driver Code
public static void Main(String[] args)
{
    int n = 5;
    for (int i = 0; i < divisor.Length; i++)
        divisor[i] = new List<int>();
    sieve();
      
    // Function Call
    findNFactors(n);
}
}
  
// This code is contributed by shikhasingrajput


Javascript




<script>
 
// Javascript implementation to find the
// factors of first N natural
// numbers
 
var MAX = 100000;
   
// Initialize global divisor vector
// array of sequence container
var divisor = Array.from(Array(MAX+1),()=> Array(0));
 
// Calculate all
// divisors of number
function sieve()
{
    for (var i = 1; i <= MAX; ++i) {
        for (var j = i; j <= MAX; j += i)
            divisor[j].push(i);
    }
}
 
// Function to find the
// factors of first n
// natural numbers
function findNFactors(n){
    for(var i = 1; i <= n; i++){
        document.write( i + "-->");
        for (var j =0; j< divisor[i].length;j++){
            document.write( divisor[i][j] + ", ");
        }
        document.write( "<br>");
    }
}
 
// Driver Code
var n = 5;
sieve();
 
// Function Call
findNFactors(n);
 
// This code is contributed by noob2000.
</script>


Output: 

1-->1, 
2-->1, 2, 
3-->1, 3, 
4-->1, 2, 4, 
5-->1, 5,

 

 



Like Article
Suggest improvement
Share your thoughts in the comments

Similar Reads