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++

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ Program to implement
// the above approach
  
#include <bits/stdc++.h>
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);
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# 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_

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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

chevron_right


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.