# Find the Smallest number that divides X^X

• Difficulty Level : Basic
• Last Updated : 23 Mar, 2021

Given a number X, find the Smallest Number, which is greater than 1, that divides XX. In the given question, X is always presumed to be greater than 1.
Examples:

Input: X = 6
Output:
Explanation: As, 66 is equal to 46656, which is divisible by 2 and it’s the smallest among all its divisors.
Input: X = 3
Output:
Explanation: As, 33 is equal to 27, which is divisible by 3 and it’s the smallest among all its divisors.

Approach:
The main observation of this problem is that if a number P divides X, then it also divides XX, so we don’t need to calculate the value of XX. What we need to do is to find the smallest number that divides X which will always be a Prime Number.
Below is the implementation of the above approach:

## C++

 `// C++ implementation of above approach``#include ``using` `namespace` `std;` `// Function to find the required smallest number``int` `SmallestDiv(``int` `n)``{`` ` `    ``for` `(``int` `i = 2; i * i <= n; i++) {``        ``// Finding smallest number that divides n``        ``if` `(n % i == 0) {` `            ``// i divides n and return this``            ``// value immediately``            ``return` `i;``        ``}``    ``}`` ` `    ``// If n is a prime number then answer should be n,``    ``// As we can't take 1 as our answer.``    ``return` `n;``}`` ` `// Driver Code``int` `main()``{`` ` `    ``int` `X = 385;`` ` `    ``int` `ans = SmallestDiv(X);``    ``cout << ans << ``"\n"``;`` ` `    ``return` `0;``}`

## Java

 `// Java implementation of above approach``class` `GFG{` `// Function to find the``// required smallest number``static` `int` `SmallestDiv(``int` `n)``{``    ``for``(``int` `i = ``2``; i * i <= n; i++)``    ``{``        ` `       ``// Finding smallest number``       ``// that divides n``       ``if` `(n % i == ``0``)``       ``{` `           ``// i divides n and return this``           ``// value immediately``           ``return` `i;``       ``}``    ``}` `    ``// If n is a prime number then``    ``// answer should be n, as we``    ``// can't take 1 as our answer.``    ``return` `n;``}` `// Driver Code``public` `static` `void` `main(String[] args)``{``    ``int` `X = ``385``;``    ``int` `ans = SmallestDiv(X);``    ` `    ``System.out.print(ans + ``"\n"``);``}``}` `// This code is contributed by gauravrajput1`

## Python3

 `# Python3 implementation of above approach` `# Function to find the required smallest number``def` `SmallestDiv(n):``  ` `    ``i ``=` `2``    ``while` `i ``*` `i <``=` `n:` `        ``# Finding smallest number that divides n``        ``if` `(n ``%` `i ``=``=` `0``):`` ` `            ``# i divides n and return this``            ``# value immediately``            ``return` `i``        ``i ``+``=` `1``    ` `    ``# If n is a prime number then answer should be n,``    ``# As we can't take 1 as our answer.``    ``return` `n``  ` `# Driver Code``if` `__name__``=``=``"__main__"``:` `    ``X ``=` `385``    ``ans ``=` `SmallestDiv(X)` `    ``print``(ans)` `# This code is contributed by Yash_R`

## C#

 `// C# implementation of above approach``using` `System;` `class` `GFG {``    ` `// Function to find the``// required smallest number``static` `int` `SmallestDiv(``int` `n)``{``    ``for``(``int` `i = 2; i * i <= n; i++)``    ``{``        ` `       ``// Finding smallest number``       ``// that divides n``       ``if` `(n % i == 0)``       ``{``           ` `           ``// i divides n and return this``           ``// value immediately``           ``return` `i;``       ``}``    ``}` `    ``// If n is a prime number then``    ``// answer should be n, as we``    ``// can't take 1 as our answer.``    ``return` `n;``}` `// Driver code``public` `static` `void` `Main(String[] args)``{``    ``int` `X = 385;``    ``int` `ans = SmallestDiv(X);``    ` `    ``Console.Write(ans + ``"\n"``);``}``}` `// This code is contributed by shivanisinghss2110`

## Javascript

 ``

`Output: 5`

Time Complexity: O(sqrt(X))

My Personal Notes arrow_drop_up