Open In App

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

Last Updated : 16 Apr, 2021
Improve
Improve
Like Article
Like
Save
Share
Report

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 <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);
}


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


Javascript




<script>
// javascript program to implement
// the above approach
 
    // Function to check if a prime number
    // satisfies the condition to be
    // expressed as sum of two perfect
    // squares
    function sumSquare(p) {
        return (p - 1) % 4 == 0;
    }
 
    // Function to check if a
    // number is prime or not
    function isPrime(n) {
 
        // Corner cases
        if (n <= 1)
            return false;
 
        if (n <= 3)
            return true;
 
        if (n % 2 == 0 || n % 3 == 0)
            return false;
 
        for (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
    function countOfPrimes(L , R) {
        var count = 0;
        for (var 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
        var L = 5, R = 41;
        document.write(countOfPrimes(L, R));
 
// This code is contributed by todaysgaurav
</script>


Output: 

6

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



Like Article
Suggest improvement
Previous
Next
Share your thoughts in the comments

Similar Reads