# N-th prime factor of a given number

• Last Updated : 21 May, 2021

Given Q queries which consist of two integers, one is number(1 <= number <= 106) and the other is N., the task is to find the N-th prime factor of the given number.
Examples:

Input: Number of Queries, Q = 4
number = 6, N = 1
number = 210, N = 3
number = 210, N = 2
number = 60, N = 2
Output:

3
6 has prime factors 2 and 3.
210 has prime factors 2, 3 and 6.
60 has prime factors 2 and 3.

A naive approach is to factorize every number and store the prime factors. Print the N-th prime factors thus stored.
Time Complexity: O(log(n)) per query.
An efficient approach is to pre-calculate all the prime factors of the number and store the numbers in a sorted order in a 2-D vector. Since the number will not be more than 106, the number of unique prime factors will be around 7-8 at max(because of 2 * 3 * 5 * 7 * 11 * 13 * 17 * 19 >= 106). Once the numbers are stored, the query can be answered in O(1) as the n-1th index will have the answer in numberth row.
Below is the implementation of the above approach:

## CPP

 `// C++ program to answer queries``// for N-th prime factor of a number``#include ``using` `namespace` `std;``const` `int` `N = 1000001;` `// 2-D vector that stores prime factors``vector<``int``> v[N];` `// Function to pre-store prime``// factors of all numbers till 10^6``void` `preprocess()``{``    ``// calculate unique prime factors for``    ``// every number till 10^6``    ``for` `(``int` `i = 1; i < N; i++) {` `        ``int` `num = i;` `        ``// find prime factors``        ``for` `(``int` `j = 2; j <= ``sqrt``(num); j++) {``            ``if` `(num % j == 0) {` `                ``// store if prime factor``                ``v[i].push_back(j);` `                ``while` `(num % j == 0) {``                    ``num = num / j;``                ``}``            ``}``        ``}``        ` `        ``if``(num>2)``        ``v[i].push_back(num);``        ` `    ``}``}` `// Function that returns answer``// for every query``int` `query(``int` `number, ``int` `n)``{``    ``return` `v[number][n - 1];``}` `// Driver Code``int` `main()``{` `    ``// Function to pre-store unique prime factors``    ``preprocess();` `    ``// 1st query``    ``int` `number = 6, n = 1;``    ``cout << query(number, n) << endl;` `    ``// 2nd query``    ``number = 210, n = 3;``    ``cout << query(number, n) << endl;` `    ``// 3rd query``    ``number = 210, n = 2;``    ``cout << query(number, n) << endl;` `    ``// 4th query``    ``number = 60, n = 2;``    ``cout << query(number, n) << endl;` `    ``return` `0;``}`

## Java

 `// Java program to answer queries``// for N-th prime factor of a number``import` `java.util.*;` `class` `GFG``{``    ` `static` `int` `N = ``1000001``;` `// 2-D vector that stores prime factors``static` `Vector []v = ``new` `Vector[N];` `// Function to pre-store prime``// factors of all numbers till 10^6``static` `void` `preprocess()``{``    ``// calculate unique prime factors for``    ``// every number till 10^6``    ``for` `(``int` `i = ``1``; i < N; i++)``    ``{` `        ``int` `num = i;` `        ``// find prime factors``        ``for` `(``int` `j = ``2``; j <= Math.sqrt(num); j++)``        ``{``            ``if` `(num % j == ``0``)``            ``{` `                ``// store if prime factor``                ``v[i].add(j);` `                ``while` `(num % j == ``0``)``                ``{``                    ``num = num / j;``                ``}``            ``}``        ``}``        ``if``(num > ``2``)``        ``v[i].add(num);``    ``}``}` `// Function that returns answer``// for every query``static` `int` `query(``int` `number, ``int` `n)``{``    ``return` `v[number].get(n - ``1``);``}` `// Driver Code``public` `static` `void` `main(String[] args)``{` `    ``for` `(``int` `i = ``0``; i < N; i++)``        ``v[i] = ``new` `Vector();` `    ``// Function to pre-store unique prime factors``    ``preprocess();` `    ``// 1st query``    ``int` `number = ``6``, n = ``1``;``    ``System.out.print(query(number, n) +``"\n"``);` `    ``// 2nd query``    ``number = ``210``; n = ``3``;``    ``System.out.print(query(number, n) +``"\n"``);` `    ``// 3rd query``    ``number = ``210``; n = ``2``;``    ``System.out.print(query(number, n) +``"\n"``);` `    ``// 4th query``    ``number = ``60``; n = ``2``;``    ``System.out.print(query(number, n) +``"\n"``);``}``}` `// This code is contributed by PrinciRaj1992`

## Python3

 `# Python3 program to answer queries``# for N-th prime factor of a number``from` `math ``import` `sqrt,ceil``N ``=` `10001` `# 2-D vector that stores prime factors``v ``=` `[[] ``for` `i ``in` `range``(N)]` `# Function to pre-store prime``# factors of all numbers till 10^6``def` `preprocess():``    ` `    ``# calculate unique prime factors for``    ``# every number till 10^6``    ``for` `i ``in` `range``(``1``, N):` `        ``num ``=` `i` `        ``# find prime factors``        ``for` `j ``in` `range``(``2``,ceil(sqrt(num)) ``+` `1``):``            ``if` `(num ``%` `j ``=``=` `0``):``                ` `                ``# store if prime factor``                ``v[i].append(j)` `                ``while` `(num ``%` `j ``=``=` `0``):``                    ``num ``=` `num ``/``/` `j` `        ``if``(num > ``2``):``            ``v[i].append(num)` `# Function that returns answer``# for every query``def` `query(number, n):``    ``return` `v[number][n ``-` `1``]` `# Driver Code` `# Function to pre-store unique prime factors``preprocess()` `# 1st query``number ``=` `6``n ``=` `1``print``(query(number, n))` `# 2nd query``number ``=` `210``n ``=` `3``print``(query(number, n))` `# 3rd query``number ``=` `210``n ``=` `2``print``(query(number, n))` `# 4th query``number ``=` `60``n ``=` `2``print``(query(number, n))` `# This code is contributed by mohit kumar 29`

## C#

 `// C# program to answer queries``// for N-th prime factor of a number``using` `System;``using` `System.Collections.Generic;` `class` `GFG``{``    ` `static` `int` `N = 100001;` `// 2-D vector that stores prime factors``static` `List<``int``> []v = ``new` `List<``int``>[N];` `// Function to pre-store prime``// factors of all numbers till 10^6``static` `void` `preprocess()``{``    ``// calculate unique prime factors for``    ``// every number till 10^6``    ``for` `(``int` `i = 1; i < N; i++)``    ``{` `        ``int` `num = i;` `        ``// find prime factors``        ``for` `(``int` `j = 2; j <= Math.Sqrt(num); j++)``        ``{``            ``if` `(num % j == 0)``            ``{` `                ``// store if prime factor``                ``v[i].Add(j);` `                ``while` `(num % j == 0)``                ``{``                    ``num = num / j;``                ``}``            ``}``        ``}``        ``if``(num > 2)``        ``v[i].Add(num);``    ``}``}` `// Function that returns answer``// for every query``static` `int` `query(``int` `number, ``int` `n)``{``    ``return` `v[number][n - 1];``}` `// Driver Code``public` `static` `void` `Main(String[] args)``{` `    ``for` `(``int` `i = 0; i < N; i++)``        ``v[i] = ``new` `List<``int``>();` `    ``// Function to pre-store unique prime factors``    ``preprocess();` `    ``// 1st query``    ``int` `number = 6, n = 1;``    ``Console.Write(query(number, n) +``"\n"``);` `    ``// 2nd query``    ``number = 210; n = 3;``    ``Console.Write(query(number, n) +``"\n"``);` `    ``// 3rd query``    ``number = 210; n = 2;``    ``Console.Write(query(number, n) +``"\n"``);` `    ``// 4th query``    ``number = 60; n = 2;``    ``Console.Write(query(number, n) +``"\n"``);``}``}` `// This code is contributed by PrinciRaj1992`

## Javascript

 ``

Output:

```2
5
3
3```

Time Complexity: O(1) per query and O(maxN * log(maxN)) for pre-processing, where maxN = 106.
Auxiliary Space: O(N * 8) in worst case

My Personal Notes arrow_drop_up