# Smallest number having only 4 divisors with difference between any two at most D

• Last Updated : 16 Feb, 2022

Given the number D, find the smallest number N such that it has exactly four divisors and the difference between any two of them is greater than or equal to D.

Examples:

Input: 1
Output: 6
Explanation: 6 has four divisors 1, 2, 3, and 6.
Difference between any two of them is always greater or equal to 1.

Input: 2
Output: 15
Explanation: 15 has four divisors 1, 3, 5 and 15.
Difference between any two of them is always greater or equal to 2

Input: 3
Output: 55
Explanation: 55 has four divisors 1, 5, 11 and 55.
Difference between any two of them is always greater than 3.

Approach: It is obvious that ‘1’ and the number itself are the divisors of N. So the number which has exactly 4 divisors has its divisors as 1, a, b, a*b respectively. For the condition that it has exactly 4 divisors, both a and b must be prime. For the condition that the difference between any two of them should at least be D, start finding a from 1+d and check whether it is prime or not, If it is not prime then we will find the prime number just next to it. Similarly, start finding b from a + d and check whether it is prime or not, and do the same as done for finding a.

Below is the implementation of the above approach.

## C++

 `// C++ program for the above approach``#include ``using` `namespace` `std;` `int` `next_prime(``int` `x)``{``    ``// Edge case``    ``if` `(x == 1 || x == 2) {``        ``return` `2;``    ``}` `    ``// Checking if x is prime``    ``bool` `is_prime = ``false``;` `    ``// Loop until next prime is found``    ``while` `(!is_prime) {``        ``is_prime = ``true``;``        ``for` `(``int` `i = 2; i <= ``sqrt``(x); i++) {``            ``if` `(x % i == 0) {``                ``is_prime = ``false``;``            ``}``        ``}``        ``x++;``    ``}``    ``return` `x - 1;``}` `// Function to find the number``int` `findN(``int` `D)``{``    ``// Assuming 1+D as first required``    ``// divisor because it is``    ``// at distance D from 1``    ``int` `a = 1 + D;` `    ``// Checking whether 1+D is prime or not``    ``// otherwise it will return prime number``    ``// just next to it``    ``a = next_prime(a);` `    ``// Checking the same for next divisor``    ``int` `b = a + D;``    ``b = next_prime(b);` `    ``int` `N = a * b;``    ``return` `N;``}` `// Driver Code``int` `main()``{``    ``int` `D = 2;` `    ``int` `ans = findN(D);``    ``cout << ans;``}`

## Java

 `// Java program for the above approach``import` `java.io.*;``import` `java.lang.*;``import` `java.util.*;` `class` `GFG {` `  ``static` `int` `next_prime(``int` `x)``  ``{``    ``// Edge case``    ``if` `(x == ``1` `|| x == ``2``) {``      ``return` `2``;``    ``}` `    ``// Checking if x is prime``    ``Boolean is_prime = ``false``;` `    ``// Loop until next prime is found``    ``while` `(!is_prime) {``      ``is_prime = ``true``;``      ``for` `(``int` `i = ``2``; i * i <= x; i++) {``        ``if` `(x % i == ``0``) {``          ``is_prime = ``false``;``        ``}``      ``}``      ``x++;``    ``}``    ``return` `x - ``1``;``  ``}` `  ``// Function to find the number``  ``static` `int` `findN(``int` `D)``  ``{``    ``// Assuming 1+D as first required``    ``// divisor because it is``    ``// at distance D from 1``    ``int` `a = ``1` `+ D;` `    ``// Checking whether 1+D is prime or not``    ``// otherwise it will return prime number``    ``// just next to it``    ``a = next_prime(a);` `    ``// Checking the same for next divisor``    ``int` `b = a + D;``    ``b = next_prime(b);` `    ``int` `N = a * b;``    ``return` `N;``  ``}` `  ``// Driver Code``  ``public` `static` `void` `main (String[] args) {``    ``int` `D = ``2``;` `    ``int` `ans = findN(D);``    ``System.out.println(ans);``  ``}``}` `// This code is contributed by hrithikgarg03188.`

## Python3

 `# Python code for the above approach``def` `next_prime(x):``  ` `    ``# Edge case``    ``if` `(x ``=``=` `1` `or` `x ``=``=` `2``):``        ``return` `2` `    ``# Checking if x is prime``    ``is_prime ``=` `False` `    ``# Loop until next prime is found``    ``while` `(``not` `is_prime):``        ``is_prime ``=` `True``        ``for` `i ``in` `range``(``2``, ``int``(x ``*``*` `0.5``) ``+` `1``):``            ``if` `(x ``%` `i ``=``=` `0``):``                ``is_prime ``=` `False` `        ``x ``+``=` `1` `    ``return` `x ``-` `1` `# Function to find the number``def` `findN(D):` `    ``# Assuming 1+D as first required``    ``# divisor because it is``    ``# at distance D from 1``    ``a ``=` `1` `+` `D` `    ``# Checking whether 1+D is prime or not``    ``# otherwise it will return prime number``    ``# just next to it``    ``a ``=` `next_prime(a)` `    ``# Checking the same for next divisor``    ``b ``=` `a ``+` `D``    ``b ``=` `next_prime(b)` `    ``N ``=` `a ``*` `b``    ``return` `N` `# Driver Code``D ``=` `2` `ans ``=` `findN(D)``print``(ans)` `# This code is contributed by Saurabh Jaiswal`

## C#

 `// C# program for the above approach``using` `System;``class` `GFG {` `  ``static` `int` `next_prime(``int` `x)``  ``{``    ` `    ``// Edge case``    ``if` `(x == 1 || x == 2) {``      ``return` `2;``    ``}` `    ``// Checking if x is prime``    ``bool` `is_prime = ``false``;` `    ``// Loop until next prime is found``    ``while` `(!is_prime) {``      ``is_prime = ``true``;``      ``for` `(``int` `i = 2; i * i <= x; i++) {``        ``if` `(x % i == 0) {``          ``is_prime = ``false``;``        ``}``      ``}``      ``x++;``    ``}``    ``return` `x - 1;``  ``}` `  ``// Function to find the number``  ``static` `int` `findN(``int` `D)``  ``{``    ` `    ``// Assuming 1+D as first required``    ``// divisor because it is``    ``// at distance D from 1``    ``int` `a = 1 + D;` `    ``// Checking whether 1+D is prime or not``    ``// otherwise it will return prime number``    ``// just next to it``    ``a = next_prime(a);` `    ``// Checking the same for next divisor``    ``int` `b = a + D;``    ``b = next_prime(b);` `    ``int` `N = a * b;``    ``return` `N;``  ``}` `  ``// Driver Code``  ``public` `static` `void` `Main () {``    ``int` `D = 2;` `    ``int` `ans = findN(D);``    ``Console.WriteLine(ans);``  ``}``}` `// This code is contributed by Samim Hossain Mondal.`

## Javascript

 ``
Output
`15`

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

My Personal Notes arrow_drop_up