Kth Largest factor of N Problem (TCS Codevita)

Kth Largest factor Of N Problem 

Kth Largest factor Of N Problem is one of the problem that was asked in previous year TCS Codevita Exam. Here in this problem two positive integers N and K are given. You have to find the kth largest factor of N.

kth Largest factor of N

Problem Description

A positive integer d is said to be a factor of another positive integer N if when N is divided by d, the remainder obtained is zero. For example, for number 12, there are 6 factors 1, 2, 3, 4, 6, 12. Every positive integer k has at least two factors, 1 and the number k itself.Given two positive integers N and k, write a program to print the kth largest factor of N.

Input Format:

  • The input is a comma-separated list of positive integer pairs (N, k)

Output Format:

  • The kth highest factor of N. If N does not have k factors, the output should be 1.

Constraints:

  • 1<N<10000000000.
  • 1<k<600.
  • You can assume that N will have no prime factors which are larger than 13.

Example 1

  • Input: 12,3
  • Output: 4

Explanation: N is 12, k is 3. The factors of 12 are (1,2,3,4,6,12). The highest factor is 12 and the third largest factor is 4. The output must be 4

Example 2

  • Input: 30,9
  • Output: 1

Explanation: N is 30, k is 9. The factors of 30 are (1,2,3,5,6,10,15,30). There are only 8 factors. As k is more than the number of factors, the output is 1.

Solution for kth Largest factor of N Problem

#include<bits/stdc++.h>
using namespace std;
vector<int> a,ans;

void Find_Factor(int f,int i)
{
if(f>sqrt(a[0])) return;
if(a[0]%f)
{
Find_Factor(f+i,i);return;
}
ans.push_back(f);
Find_Factor(f+i,i);
if(f*f!=a[0])
ans.push_back(a[0]/f);
}

int main()
{
string s;getline(cin,s);
int n,k;
istringstream ss(s);
for(int i;ss>>i;)
{
a.push_back(i);
if(ss.peek()==',') ss.ignore();
}
ans.push_back(1);
if((a[0]&1)==0) Find_Factor(2,1);
else Find_Factor(3,2);
ans.push_back(a[0]);
//for(auto i:ans) cout<<i<<" ";
if(ans.size()<a[1]) cout<<1;
else cout<<ans[ans.size()-a[1]];
}
import java.util.Scanner;
public class Test
{
public static void main (String[]args)
{
Scanner sc = new Scanner (System.in);

int number, r, i, count = 0;
number = sc.nextInt ();
r = sc.nextInt ();

for (i = number; i >= 1; i--)
{
if ((number % i) == 0)
count++;
if (count == r)
{
System.out.println (i);
break;
}
}
if (count != r)
System.out.println ("1");


}

}
def Find_Factor(f,i,n,ans):
if f*f>n:
return
if (n%f):
Find_Factor(f+i,i,n,ans)
return
ans.append(f)
Find_Factor(f+i,i,n,ans)
if (f*f)!=n:
ans.append(n//f)

n,k=map(int,input().split(","))
ans=[]
ans.append(1)
if n&1:
Find_Factor(3,2,n,ans)
else:
Find_Factor(2,1,n,ans)
ans.append(n)

if(len(ans)<k):
print(1)
else:
print(ans[len(ans)-k])