Count pairs with sum as a prime number and less than n - GeeksforGeeks
Given a positive integer n, count distinct number of pairs (x, y) that satisfy following conditions :
http://www.geeksforgeeks.org/sieve-sundaram-print-primes-smaller-n/
Read full article from Count pairs with sum as a prime number and less than n - GeeksforGeeks
Given a positive integer n, count distinct number of pairs (x, y) that satisfy following conditions :
- (x + y) is a prime number.
- (x + y) < n
- x != y
- 1 <= x, y
void
SieveOfSundaram(
bool
marked[],
int
nNew)
{
// Main logic of Sundaram. Mark all numbers
// of the form i + j + 2ij as true where
// 1 <= i <= j
for
(
int
i=1; i<=nNew; i++)
for
(
int
j=i; (i + j + 2*i*j) <= nNew; j++)
marked[i + j + 2*i*j] =
true
;
}
// Returns number of pairs with fiven conditions.
int
countPrimePairs(
int
n)
{
// In general Sieve of Sundaram, produces
// primes smaller than (2*x + 2) for a number
// given number x. Since we want primes smaller
// than n, we reduce n to half
int
nNew = (n-2)/2;
// This array is used to separate numbers of
// the form i+j+2ij from others where
// 1 <= i <= j
bool
marked[nNew + 1];
// Initialize all elements as not marked
memset
(marked,
false
,
sizeof
(marked));
SieveOfSundaram(marked, nNew);
int
count = 0, prime_num;
// Find primes. Primes are of the form
// 2*i + 1 such that marked[i] is false.
for
(
int
i=1; i<=nNew; i++)
{
if
(marked[i] ==
false
)
{
prime_num = 2*i + 1;
// For a given prime number p
// number of distinct pairs(i,j)
// where (i+j) = p are p/2
count = count + (prime_num / 2);
}
}
return
count;
}
Read full article from Count pairs with sum as a prime number and less than n - GeeksforGeeks