 Open in App
Not now

# 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
Related Articles