# Count of primes in a given range that can be expressed as sum of perfect squares

Given two integers L and R, the task is to find the number of prime numbers in the range [L, R] that can be represented by the sum of two squares of two numbers.
Examples:

Input: L = 1, R = 5
Output:
Explanation:
Only prime number that can be expressed as sum of two perfect squares in the given range is 5 (22 + 12)
Input: L = 7, R = 42
Output:
Explanation:
The prime numbers in the given range that can be expressed as sum of two perfect squares are:
13 = 22 + 32
17 = 12 + 42
29 = 52 + 22
37 = 12 + 62
41 = 52 + 42

Approach:
The given problem can be solved using Fermat’s Little theorem, which states that a prime number p can be expressed as the sum of two squares if p satisfies the following equation:

(p – 1) % 4 == 0

Follow the steps below to solve the problem:

• Traverse the range [L, R].
• For every number, check if it is a prime number of not.
• If found to be so, check if the prime number is of the form 4K + 1. If sp, increase count.
• After traversing the complete range, print count.

Below is the implementation of the above approach:

## C++

 `// C++ Program to implement ` `// the above approach ` ` `  `#include ` `using` `namespace` `std; ` ` `  `// Function to check if a prime number ` `// satisfies the condition to be ` `// expressed as sum of two perfect squares ` `bool` `sumSquare(``int` `p) ` `{ ` `    ``return` `(p - 1) % 4 == 0; ` `} ` ` `  `// Function to check if a ` `// number is prime or not ` `bool` `isPrime(``int` `n) ` `{ ` `    ``// Corner cases ` `    ``if` `(n <= 1) ` `        ``return` `false``; ` ` `  `    ``if` `(n <= 3) ` `        ``return` `true``; ` ` `  `    ``if` `(n % 2 == 0 || n % 3 == 0) ` `        ``return` `false``; ` ` `  `    ``for` `(``int` `i = 5; i * i <= n; i = i + 6) ` `        ``if` `(n % i == 0 || n % (i + 2) == 0) ` `            ``return` `false``; ` ` `  `    ``return` `true``; ` `} ` ` `  `// Function to return the count of primes ` `// in the range which can be expressed as ` `// the sum of two squares ` `int` `countOfPrimes(``int` `L, ``int` `R) ` `{ ` `    ``int` `count = 0; ` `    ``for` `(``int` `i = L; i <= R; i++) { ` ` `  `        ``// If i is a prime ` `        ``if` `(isPrime(i)) { ` ` `  `            ``// If i can be expressed ` `            ``// as the sum of two squares ` `            ``if` `(sumSquare(i)) ` `                ``count++; ` `        ``} ` `    ``} ` ` `  `    ``// Return the count ` `    ``return` `count; ` `} ` ` `  `// Driver Code ` `int` `main() ` `{ ` `    ``int` `L = 5, R = 41; ` `    ``cout << countOfPrimes(L, R); ` `} `

## Java

 `// Java program to implement ` `// the above approach ` `import` `java.util.*; ` ` `  `class` `GFG{ ` ` `  `// Function to check if a prime number ` `// satisfies the condition to be  ` `// expressed as sum of two perfect ` `// squares ` `static` `boolean` `sumSquare(``int` `p) ` `{ ` `    ``return` `(p - ``1``) % ``4` `== ``0``; ` `} ` ` `  `// Function to check if a ` `// number is prime or not ` `static` `boolean` `isPrime(``int` `n) ` `{ ` `     `  `    ``// Corner cases ` `    ``if` `(n <= ``1``) ` `        ``return` `false``; ` ` `  `    ``if` `(n <= ``3``) ` `        ``return` `true``; ` ` `  `    ``if` `(n % ``2` `== ``0` `|| n % ``3` `== ``0``) ` `        ``return` `false``; ` ` `  `    ``for``(``int` `i = ``5``; i * i <= n; i = i + ``6``) ` `        ``if` `(n % i == ``0` `|| n % (i + ``2``) == ``0``) ` `            ``return` `false``; ` ` `  `    ``return` `true``; ` `} ` ` `  `// Function to return the count of primes ` `// in the range which can be expressed as ` `// the sum of two squares ` `static` `int` `countOfPrimes(``int` `L, ``int` `R) ` `{ ` `    ``int` `count = ``0``; ` `    ``for``(``int` `i = L; i <= R; i++)  ` `    ``{ ` ` `  `        ``// If i is a prime ` `        ``if` `(isPrime(i))  ` `        ``{ ` ` `  `            ``// If i can be expressed ` `            ``// as the sum of two squares ` `            ``if` `(sumSquare(i)) ` `                ``count++; ` `        ``} ` `    ``} ` `     `  `    ``// Return the count ` `    ``return` `count; ` `} ` ` `  `// Driver code ` `public` `static` `void` `main(String[] args) ` `{ ` `    ``int` `L = ``5``, R = ``41``; ` ` `  `    ``System.out.println(countOfPrimes(L, R)); ` `} ` `} ` ` `  `// This code is contributed by offbeat `

## Python3

 `# Python3 program for the ` `# above approach ` ` `  `# Function to check if a prime number ` `# satisfies the condition to be  ` `# expressed as sum of two perfect ` `# squares  ` `def` `sumsquare(p): ` `   `  `  ``return` `(p ``-` `1``) ``%` `4` `=``=` `0` ` `  `# Function to check if a  ` `# number is prime or not  ` `def` `isprime(n): ` `   `  `  ``# Corner cases  ` `  ``if` `n <``=` `1``: ` `    ``return` `False` `  ``if` `n <``=` `3``: ` `    ``return` `True` `  ``if` `(n ``%` `2` `=``=` `0``) ``or` `(n ``%` `3` `=``=` `0``): ` `    ``return` `False` `   `  `  ``i ``=` `5` `  ``while` `(i ``*` `i <``=` `n): ` `    ``if` `((n ``%` `i ``=``=` `0``) ``or`  `        ``(n ``%` `(i ``+` `2``) ``=``=` `0``)): ` `      ``return` `False` `    ``i ``+``=` `6` `     `  `  ``return` `True` ` `  `# Function to return the count of primes  ` `# in the range which can be expressed as  ` `# the sum of two squares  ` `def` `countOfPrimes(L, R): ` `   `  `  ``count ``=` `0` `  ``for` `i ``in` `range``(L, R ``+` `1``): ` `     `  `    ``# If i is a prime  ` `    ``if` `(isprime(i)): ` `       `  `      ``# If i can be expressed  ` `      ``# as the sum of two squares  ` `      ``if` `sumsquare(i): ` `        ``count ``+``=` `1` ` `  `  ``# Return the count  ` `  ``return` `count ` ` `  `# Driver code ` `if` `__name__``=``=``'__main__'``: ` `   `  `  ``L ``=` `5` `  ``R ``=` `41` `  ``print``(countOfPrimes(L, R)) ` `     `  `# This code is contributed by virusbuddah_`

## C#

 `// C# program to implement ` `// the above approach ` `using` `System; ` ` `  `class` `GFG{ ` ` `  `// Function to check if a prime number ` `// satisfies the condition to be  ` `// expressed as sum of two perfect ` `// squares ` `static` `bool` `sumSquare(``int` `p) ` `{ ` `    ``return` `(p - 1) % 4 == 0; ` `} ` ` `  `// Function to check if a ` `// number is prime or not ` `static` `bool` `isPrime(``int` `n) ` `{ ` `     `  `    ``// Corner cases ` `    ``if` `(n <= 1) ` `        ``return` `false``; ` ` `  `    ``if` `(n <= 3) ` `        ``return` `true``; ` ` `  `    ``if` `(n % 2 == 0 || n % 3 == 0) ` `        ``return` `false``; ` ` `  `    ``for``(``int` `i = 5; i * i <= n; i = i + 6) ` `        ``if` `(n % i == 0 || n % (i + 2) == 0) ` `            ``return` `false``; ` ` `  `    ``return` `true``; ` `} ` ` `  `// Function to return the count of primes ` `// in the range which can be expressed as ` `// the sum of two squares ` `static` `int` `countOfPrimes(``int` `L, ``int` `R) ` `{ ` `    ``int` `count = 0; ` `    ``for``(``int` `i = L; i <= R; i++)  ` `    ``{ ` ` `  `        ``// If i is a prime ` `        ``if` `(isPrime(i))  ` `        ``{ ` ` `  `            ``// If i can be expressed ` `            ``// as the sum of two squares ` `            ``if` `(sumSquare(i)) ` `                ``count++; ` `        ``} ` `    ``} ` `     `  `    ``// Return the count ` `    ``return` `count; ` `} ` ` `  `// Driver code ` `public` `static` `void` `Main(String[] args) ` `{ ` `    ``int` `L = 5, R = 41; ` ` `  `    ``Console.WriteLine(countOfPrimes(L, R)); ` `} ` `} ` ` `  `// This code is contributed by Rajput-Ji `

Output:

```6
```

Time Complexity: O(N3/2
Auxiliary Space: O(1)

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.