# Nth Term of a Fibonacci Series of Primes formed by concatenating pairs of Primes in a given range

Given two integers X and Y, the task is to perform the following operations:

• Find all prime numbers in the range [X, Y].
• Generate all numbers possible by combining every pair of primes in the given range.
• Find the prime numbers among all the possible numbers generated above. Calculate the count of primes among them, say N.
• Print the Nth term of a Fibonacci Series formed by having the smallest and largest primes from the above list as the first two terms of the series.

Examples:

Input: X = 2 Y = 40
Output: 34
Explanation:
All primes in the range [X, Y] = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37]
All possible numbers generated by concatenating each pair of prime = [23, 25, 27, 211, 213, 217, 219, 223, 229, 231, 32, 35, 37, 311, 313, 319, 323, 329, 331, 337, 52, 53, 57, 511, 513, 517, 519, 523, 529, 531, 537, 72, 73, 75, 711, 713, 717, 719, 723, 729, 731, 737, 112, 113, 115, 117, 1113, 1117, 1119, 1123, 1129, 1131, 1137, 132, 133, 135, 137, 1311, 1317, 1319, 1323, 1329, 1331, 1337, 172, 173, 175, 177, 1711, 1713, 1719, 1723, 1729, 1731, 1737, 192, 193, 195, 197, 1911, 1913, 1917, 1923, 1929, 1931, 1937, 232, 233, 235, 237, 2311, 2313, 2317, 2319, 2329, 2331, 2337, 292, 293, 295, 297, 2911, 2913, 2917, 2919, 2923, 2931, 2937, 312, 315, 317, 3111, 3113, 3117, 3119, 3123, 3129, 3137, 372, 373, 375, 377, 3711, 3713, 3717, 3719, 3723, 3729, 3731]

All primes among the generated numbers=[193, 3137, 197, 2311, 3719, 73, 137, 331, 523, 1931, 719, 337, 211, 23, 1117, 223, 1123, 229, 37, 293, 2917, 1319, 1129, 233, 173, 3119, 113, 53, 373, 311, 313, 1913, 1723, 317]

Count of the primes = 34
Smallest Prime = 23
Largest Prime = 3719
Therefore, the 34th term of the Fibonacci series having 23 and 3719 as the first two terms, is 13158006689.

Input: X = 1, Y = 10
Output: 1053

Approach:
Follow the steps below to solve the problem:

• Generate all possible primes using Sieve of Eratothenes.
• Traverse the range [X, Y] and generate all primes in the range with the help of primes[] array generated in the step above.
• Traverse the list of primes and generate all possible pairs from the list.
• For each pair, concatenate the two primes and check if their concatenation is a prime or not.
• Find the maximum and minimum of all such primes and count all such primes obtained.
• Finally, print the countth of a Fibonacci series having minimum and maximum obtained in the above step as the first two terms of the series.

Below is the implementation of the above approach:

## Python

 `# Python Program to implement ` `# the above approach ` ` `  `# Stores at each index if it's a  ` `# prime or not ` `prime ``=` `[``True` `for` `i ``in` `range``(``100001``)] ` ` `  `# Sieve of Eratosthenes to  ` `# generate all possible primes ` `def` `SieveOfEratosthenes():  ` `     `  `    ``p ``=` `2` `    ``while` `(p ``*` `p <``=` `100000``): ` `         `  `        ``# If p is a prime ` `        ``if` `(prime[p] ``=``=` `True``): ` `             `  `            ``# Set all multiples of p as non-prime ` `            ``for` `i ``in` `range``(p ``*` `p, ``100001``, p): ` `                ``prime[i] ``=` `False` `                 `  `        ``p ``+``=` `1` ` `  `# Function to generate the  ` `# required Fibonacci Series ` `def` `fibonacciOfPrime(n1, n2): ` `     `  `    ``SieveOfEratosthenes() ` `     `  `    ``# Stores all primes between ` `    ``# n1 and n2 ` `    ``initial ``=` `[] ` `     `  `    ``# Generate all primes between ` `    ``# n1 and n2 ` `    ``for` `i ``in` `range``(n1, n2): ` `        ``if` `prime[i]: ` `            ``initial.append(i) ` `             `  `    ``# Stores all concatenations ` `    ``# of each pair of primes ` `    ``now ``=` `[] ` `     `  `    ``# Generate all concatenations ` `    ``# of each pair of primes ` `    ``for` `a ``in` `initial: ` `        ``for` `b ``in` `initial: ` `            ``if` `a !``=` `b: ` `                ``c ``=` `str``(a) ``+` `str``(b) ` `                ``now.append(``int``(c)) ` `                 `  `    ``# Stores the primes out of the ` `    ``# numbers generated above ` `    ``current ``=` `[] ` `     `  `    ``for` `x ``in` `now: ` `        ``if` `prime[x]: ` `            ``current.append(x) ` `             `  `    ``# Store the unique primes ` `    ``current ``=` `set``(current) ` `     `  `    ``# Find the minimum ` `    ``first ``=` `min``(current) ` `     `  `    ``# Find the minimum ` `    ``second ``=` `max``(current) ` `     `  `    ``# Find N ` `    ``count ``=` `len``(current) ``-` `1` `    ``curr ``=` `1` `     `  `    ``while` `curr < count: ` `        ``c ``=` `first ``+` `second ` `        ``first ``=` `second ` `        ``second ``=` `c ` `        ``curr ``+``=` `1` `     `  `    ``# Print the N-th term ` `    ``# of the Fibonacci Series ` `    ``print``(c) ` ` `  `# Driver Code ` `if` `__name__ ``=``=` `"__main__"``: ` ` `  `    ``x ``=` `2` `    ``y ``=` `40` `    ``fibonacciOfPrime(x, y) `

Output:

```13158006689
```

Time Complexity: O(N2 + log(log(maxm))), where it takes O(N2) to generate all pairs and O(1) to check if a number is prime or not and maxm is the size of prime[]
Auxiliary Space: O(maxm)

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.

My Personal Notes arrow_drop_up Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.