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: 1
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: 5
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++ 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 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 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# 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 |
<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> |
6
Time Complexity: O(N3/2)
Auxiliary Space: O(1)