Related Articles

# Find the smallest twins in given range

• Difficulty Level : Medium
• Last Updated : 15 Apr, 2021

Given a range [low..high], print the smallest twin numbers in given range (low and high inclusive). Two numbers are twins if they are primes and there difference is 2.

Example:

```Input:  low = 10,  high = 100
Output: Smallest twins in given range: (11, 13)
Both 11 and 13 are prime numbers and difference
between them is two, therefore twins.  And these
are the smallest twins in [10..100]

Input:  low = 50,  high = 100
Output: Smallest twins in given range: (59, 61) ```

A Simple Solution is to start to start from low and for every number x check if x and x + 2 are primes are not. Here x varies from low to high-2.

An Efficient Solution is to use Sieve of Eratosthenes

```1) Create a boolean array "prime[0..high]" and initialize all
entries in it as true. A value in prime[i] will finally
be false if i is not a prime number, else true.

2) Run a loop from p = 2 to high.
a) If prime[p] is true, then p is prime. [See this]
b) Mark all multiples of p as not prime in prime[].

3) Run a loop from low to high and print the first twins
using prime[] built in step 2.   ```

Below is the implementation of above idea.

## C++

 `// C++ program to find the smallest twin in given range``#include ``using` `namespace` `std;` `void` `printTwins(``int` `low, ``int` `high)``{``    ``// Create a boolean array "prime[0..high]" and initialize``    ``// all entries it as true. A value in prime[i] will finally``    ``// be false if i is Not a prime, else true.``    ``bool` `prime[high+1], twin = ``false``;``    ``memset``(prime, ``true``, ``sizeof``(prime));` `    ``prime = prime = ``false``;` `    ``// Look for the smallest twin``    ``for` `(``int` `p=2; p<=``floor``(``sqrt``(high))+1; p++)``    ``{``        ``// If p is not marked, then it is a prime``        ``if` `(prime[p])``        ``{``            ``// Update all multiples of p``            ``for` `(``int` `i=p*2; i<=high; i += p)``                ``prime[i] = ``false``;``        ``}``    ``}` `    ``// Now print the smallest twin in range``    ``for` `(``int` `i=low; i<=high; i++)``    ``{``        ``if` `(prime[i] && prime[i+2])``        ``{``            ``cout << ``"Smallest twins in given range: ("``                ``<< i << ``", "` `<< i+2 << ``")"``;``            ``twin = ``true``;``            ``break``;``        ``}``    ``}``    ` `    ``if` `(twin == ``false``)``      ``cout << ``"No such pair exists"` `<

## Java

 `// Java program to find the smallest twin in given range` `class` `GFG {` `    ``static` `void` `printTwins(``int` `low, ``int` `high) {``        ``// Create a boolean array "prime[0..high]" and initialize``        ``// all entries it as true. A value in prime[i] will finally``        ``// be false if i is Not a prime, else true.``        ``boolean` `prime[] = ``new` `boolean``[high + ``1``], twin = ``false``;``        ``for` `(``int` `i = ``0``; i < prime.length; i++) {``            ``prime[i] = ``true``;``        ``}` `        ``prime[``0``] = prime[``1``] = ``false``;` `        ``// Look for the smallest twin``        ``for` `(``int` `p = ``2``; p <= Math.floor(Math.sqrt(high)) + ``1``; p++) {``            ``// If p is not marked, then it is a prime``            ``if` `(prime[p]) {``                ``// Update all multiples of p``                ``for` `(``int` `i = p * ``2``; i <= high; i += p) {``                    ``prime[i] = ``false``;``                ``}``            ``}``        ``}` `        ``// Now print the smallest twin in range``        ``for` `(``int` `i = low; i <= high; i++) {``            ``if` `(prime[i] && prime[i + ``2``]) {``                ``int` `a = i + ``2` `;``                ``System.out.print(``"Smallest twins in given range: ("``                        ``+ i + ``", "` `+ a + ``")"``);``                ``twin = ``true``;``                ``break``;``            ``}``        ``}` `        ``if` `(twin == ``false``) {``            ``System.out.println(``"No such pair exists"``);``        ``}``    ``}` `// Driver program``    ``public` `static` `void` `main(String[] args) {` `        ``printTwins(``10``, ``100``);``    ``}``}``// This code contributed by Rajput-Ji`

## Python3

 `# Python3 program to find the smallest``# twin in given range``import` `math` `def` `printTwins(low, high):` `    ``# Create a boolean array "prime[0..high]"``    ``# and initialize all entries it as true.``    ``# A value in prime[i] will finally be``    ``# false if i is Not a prime, else true.``    ``prime ``=` `[``True``] ``*` `(high ``+` `1``);``    ``twin ``=` `False``;` `    ``prime[``0``] ``=` `prime[``1``] ``=` `False``;` `    ``# Look for the smallest twin``    ``for` `p ``in` `range``(``2``, ``int``(math.floor(``                          ``math.sqrt(high)) ``+` `2``)):``        ` `        ``# If p is not marked, then it``        ``# is a prime``        ``if` `(prime[p]):``            ` `            ``# Update all multiples of p``            ``for` `i ``in` `range``(p ``*` `2``, high ``+` `1``, p):``                ``prime[i] ``=` `False``;` `    ``# Now print the smallest twin in range``    ``for` `i ``in` `range``(low, high ``+` `1``):``        ``if` `(prime[i] ``and` `prime[i ``+` `2``]):``            ``print``(``"Smallest twins in given range: ("``,``                               ``i, ``","``, (i ``+` `2``), ``")"``);``            ``twin ``=` `True``;``            ``break``;``    ` `    ``if` `(twin ``=``=` `False``):``        ``print``(``"No such pair exists"``);` `# Driver Code``printTwins(``10``, ``100``);``    ` `# This code is contributed``# by chandan_jnu`

## C#

 `    ` `// C# program to find the smallest twin in given range` `using` `System;``public` `class` `GFG {`` ` `    ``static` `void` `printTwins(``int` `low, ``int` `high) {``        ``// Create a boolean array "prime[0..high]" and initialize``        ``// all entries it as true. A value in prime[i] will finally``        ``// be false if i is Not a prime, else true.``        ``bool` `[]prime = ``new` `bool``[high + 1]; ``bool` `twin = ``false``;``        ``for` `(``int` `i = 0; i < prime.Length; i++) {``            ``prime[i] = ``true``;``        ``}`` ` `        ``prime = prime = ``false``;`` ` `        ``// Look for the smallest twin``        ``for` `(``int` `p = 2; p <= Math.Floor(Math.Sqrt(high)) + 1; p++) {``            ``// If p is not marked, then it is a prime``            ``if` `(prime[p]) {``                ``// Update all multiples of p``                ``for` `(``int` `i = p * 2; i <= high; i += p) {``                    ``prime[i] = ``false``;``                ``}``            ``}``        ``}`` ` `        ``// Now print the smallest twin in range``        ``for` `(``int` `i = low; i <= high; i++) {``            ``if` `(prime[i] && prime[i + 2]) {``                ``int` `a = i + 2 ;``                ``Console.Write(``"Smallest twins in given range: ("``                        ``+ i + ``", "` `+ a + ``")"``);``                ``twin = ``true``;``                ``break``;``            ``}``        ``}`` ` `        ``if` `(twin == ``false``) {``            ``Console.WriteLine(``"No such pair exists"``);``        ``}``    ``}`` ` `// Driver program``    ``public` `static` `void` `Main() {`` ` `        ``printTwins(10, 100);``    ``}``}``//this code contributed by Rajput-Ji`

## PHP

 ``

## Javascript

 ``
Output:
`Smallest twins in given range: (11, 13)`

Thanks to Utkarsh Trivedi for suggesting this solution.