Find the number of ordered pairs such that a * p + b * q = N, where p and q are primes
Last Updated :
25 Mar, 2022
Given an array arr[], and integer Q denoting number of queries and two numbers a, b, the task is to find the number of ordered pairs (p, q) such that a * p + b * q = arr[i], where p and q are prime numbers.
Examples:
Input: Q = 3, arr[] = { 2, 7, 11 }, a = 1, b = 2
Output: 0 1 2
Explanation:
2 -> There are no ordered pairs (p, q) such that p + 2*q = 2.
7 -> There is only one ordered pair (p, q) = (3, 2) such that p + 2*q = 7.
11 -> There are two ordered pairs (p, q) = (7, 2), (5, 3) such that p + 2*q = 11.
Input: Q = 2, arr[] = { 15, 25 }, a = 1, b = 2
Output: 2 3
Approach: The idea is to store every prime number in an array using Sieve of Eratosthenes. After storing the prime numbers, count the number of ordered pairs (p, q) such that a*p + b*q = N for every combination of (p, q) in the prime array.
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
#define size 10001
using namespace std;
int prime[size];
int freq[size];
void sieve( int a, int b)
{
prime[1] = 1;
for ( int i = 2; i * i < size; i++) {
if (prime[i] == 0) {
for ( int j = i * 2; j < size; j += i)
prime[j] = 1;
}
}
for ( int p = 1; p < size; p++) {
for ( int q = 1; q < size; q++) {
if (prime[p] == 0 && prime[q] == 0
&& a * p + b * q < size) {
freq[a * p + b * q]++;
}
}
}
}
int main()
{
int queries = 2, a = 1, b = 2;
sieve(a, b);
int arr[queries] = { 15, 25 };
for ( int i = 0; i < queries; i++) {
cout << freq[arr[i]] << " " ;
}
return 0;
}
|
Java
public class GFG {
final static int size = 10001 ;
static int prime[] = new int [size];
static int freq[] = new int [size];
static void sieve( int a, int b)
{
prime[ 1 ] = 1 ;
for ( int i = 2 ; i * i < size; i++) {
if (prime[i] == 0 ) {
for ( int j = i * 2 ; j < size; j += i)
prime[j] = 1 ;
}
}
for ( int p = 1 ; p < size; p++) {
for ( int q = 1 ; q < size; q++) {
if (prime[p] == 0 && prime[q] == 0
&& a * p + b * q < size) {
freq[a * p + b * q]++;
}
}
}
}
public static void main (String[] args)
{
int queries = 2 , a = 1 , b = 2 ;
sieve(a, b);
int arr[] = { 15 , 25 };
for ( int i = 0 ; i < queries; i++) {
System.out.print(freq[arr[i]] + " " );
}
}
}
|
Python3
from math import sqrt
size = 1000
prime = [ 0 for i in range (size)]
freq = [ 0 for i in range (size)]
def sieve(a, b):
prime[ 1 ] = 1
for i in range ( 2 , int (sqrt(size)) + 1 , 1 ):
if (prime[i] = = 0 ):
for j in range (i * 2 , size, i):
prime[j] = 1
for p in range ( 1 , size, 1 ):
for q in range ( 1 , size, 1 ):
if (prime[p] = = 0 and prime[q] = = 0 and a * p + b * q < size):
freq[a * p + b * q] + = 1
if __name__ = = '__main__' :
queries = 2
a = 1
b = 2
sieve(a, b)
arr = [ 15 , 25 ]
for i in range (queries):
print (freq[arr[i]],end = " " )
|
C#
using System;
class GFG {
static int size = 10001;
static int []prime = new int [size];
static int []freq = new int [size];
static void sieve( int a, int b)
{
prime[1] = 1;
for ( int i = 2; i * i < size; i++) {
if (prime[i] == 0) {
for ( int j = i * 2; j < size; j += i)
prime[j] = 1;
}
}
for ( int p = 1; p < size; p++) {
for ( int q = 1; q < size; q++) {
if (prime[p] == 0 && prime[q] == 0
&& a * p + b * q < size) {
freq[a * p + b * q]++;
}
}
}
}
public static void Main ( string [] args)
{
int queries = 2, a = 1, b = 2;
sieve(a, b);
int []arr = { 15, 25 };
for ( int i = 0; i < queries; i++) {
Console.Write(freq[arr[i]] + " " );
}
}
}
|
Javascript
<script>
size=10001
prime = Array(size).fill(0);
freq = Array(size).fill(0);
function sieve(a, b)
{
prime[1] = 1;
for ( var i = 2; i * i < size; i++) {
if (prime[i] == 0) {
for ( var j = i * 2; j < size; j += i)
prime[j] = 1;
}
}
for ( var p = 1; p < size; p++) {
for ( var q = 1; q < size; q++) {
if (prime[p] == 0 && prime[q] == 0
&& a * p + b * q < size) {
freq[a * p + b * q]++;
}
}
}
}
var queries = 2, a = 1, b = 2;
sieve(a, b);
var arr = [ 15, 25 ];
for ( var i = 0; i < queries; i++) {
document.write(freq[arr[i]] + " " );
}
</script>
|
Time Complexity: O(N)
Auxiliary Space: O(size)
Like Article
Suggest improvement
Share your thoughts in the comments
Please Login to comment...