Sum of prime numbers without odd prime digits
Last Updated :
31 May, 2022
Given an integer N. The task is to find the sum of the first N prime numbers which don’t contain any odd primes as their digit.
Some of such prime numbers are 2, 11, 19, 29, 41 ……
Examples:
Input : N = 2
Output : 13
2 + 11 = 13
Input : N = 7
Output : 252
Approach :
- We first use a Sieve of Eratosthenes to store all prime numbers.
- Next check for each prime number if any odd prime digit is present or not.
- If no such digit is present then we will include this prime to our required answer
- Continue above step until we get N such prime numbers
Below is the implementation of the above approach :
C++
#include <bits/stdc++.h>
using namespace std;
#define MAX 100005
vector< int > addPrimes()
{
int n = MAX;
bool prime[n + 1];
memset (prime, true , sizeof (prime));
for ( int p = 2; p * p <= n; p++) {
if (prime[p] == true ) {
for ( int i = p * p; i <= n; i += p)
prime[i] = false ;
}
}
vector< int > ans;
for ( int p = 2; p <= n; p++)
if (prime[p])
ans.push_back(p);
return ans;
}
bool is_prime( int n)
{
return (n == 3 || n == 5 || n == 7);
}
int find_Sum( int n)
{
int sum = 0;
vector< int > v = addPrimes();
for ( int i = 0; i < v.size() and n; i++)
{
int flag = 1;
int a = v[i];
while (a != 0)
{
int d = a % 10;
a = a / 10;
if (is_prime(d)) {
flag = 0;
break ;
}
}
if (flag==1)
{
n--;
sum = sum + v[i];
}
}
return sum;
}
int main()
{
int n = 7;
cout << find_Sum(n);
return 0;
}
|
Java
import java.util.*;
class GFG
{
static int MAX = 100005 ;
static Vector<Integer> addPrimes()
{
int n = MAX;
boolean []prime = new boolean [n + 1 ];
Arrays.fill(prime, true );
for ( int p = 2 ; p * p <= n; p++)
{
if (prime[p] == true )
{
for ( int i = p * p; i <= n; i += p)
prime[i] = false ;
}
}
Vector<Integer> ans = new Vector<Integer>();
for ( int p = 2 ; p <= n; p++)
if (prime[p])
ans.add(p);
return ans;
}
static boolean is_prime( int n)
{
return (n == 3 || n == 5 || n == 7 );
}
static int find_Sum( int n)
{
int sum = 0 ;
Vector<Integer> v = addPrimes();
for ( int i = 0 ; i < v.size() && n > 0 ; i++)
{
int flag = 1 ;
int a = v.get(i);
while (a != 0 )
{
int d = a % 10 ;
a = a / 10 ;
if (is_prime(d))
{
flag = 0 ;
break ;
}
}
if (flag == 1 )
{
n--;
sum = sum + v.get(i);
}
}
return sum;
}
public static void main(String[] args)
{
int n = 7 ;
System.out.println(find_Sum(n));
}
}
|
Python3
MAX = 100005
def addPrimes():
n = MAX
prime = [ True for i in range (n + 1 )]
for p in range ( 2 , n + 1 ):
if p * p > n:
break
if (prime[p] = = True ):
for i in range ( 2 * p, n + 1 , p):
prime[i] = False
ans = []
for p in range ( 2 , n + 1 ):
if (prime[p]):
ans.append(p)
return ans
def is_prime(n):
if n in [ 3 , 5 , 7 ]:
return True
return False
def find_Sum(n):
Sum = 0
v = addPrimes()
for i in range ( len (v)):
flag = 1
a = v[i]
while (a ! = 0 ):
d = a % 10 ;
a = a / / 10 ;
if (is_prime(d)):
flag = 0
break
if (flag = = 1 ):
n - = 1
Sum = Sum + v[i]
if n = = 0 :
break
return Sum
n = 7
print (find_Sum(n))
|
C#
using System;
using System.Collections.Generic;
class GFG
{
static int MAX = 100005;
static List< int > addPrimes()
{
int n = MAX;
Boolean []prime = new Boolean[n + 1];
for ( int i = 0; i < n + 1; i++)
prime[i]= true ;
for ( int p = 2; p * p <= n; p++)
{
if (prime[p] == true )
{
for ( int i = p * p; i <= n; i += p)
prime[i] = false ;
}
}
List< int > ans = new List< int >();
for ( int p = 2; p <= n; p++)
if (prime[p])
ans.Add(p);
return ans;
}
static Boolean is_prime( int n)
{
return (n == 3 ||
n == 5 || n == 7);
}
static int find_Sum( int n)
{
int sum = 0;
List< int > v = addPrimes();
for ( int i = 0;
i < v.Count && n > 0; i++)
{
int flag = 1;
int a = v[i];
while (a != 0)
{
int d = a % 10;
a = a / 10;
if (is_prime(d))
{
flag = 0;
break ;
}
}
if (flag == 1)
{
n--;
sum = sum + v[i];
}
}
return sum;
}
public static void Main(String[] args)
{
int n = 7;
Console.WriteLine(find_Sum(n));
}
}
|
Javascript
<script>
const MAX = 100005;
function addPrimes()
{
let n = MAX;
let prime = new Array(n + 1).fill( true );
for (let p = 2; p * p <= n; p++) {
if (prime[p] == true ) {
for (let i = p * p; i <= n; i += p)
prime[i] = false ;
}
}
let ans = [];
for (let p = 2; p <= n; p++)
if (prime[p])
ans.push(p);
return ans;
}
function is_prime(n)
{
return (n == 3 || n == 5 || n == 7);
}
function find_Sum(n)
{
let sum = 0;
let v = addPrimes();
for (let i = 0; i < v.length && n > 0; i++)
{
let flag = 1;
let a = v[i];
while (a != 0)
{
let d = a % 10;
a = parseInt(a / 10);
if (is_prime(d)) {
flag = 0;
break ;
}
}
if (flag==1)
{
n--;
sum = sum + v[i];
}
}
return sum;
}
let n = 7;
document.write(find_Sum(n));
</script>
|
Output :
252
Time Complexity : O(MAX + nlogm) where n is the number of primes less than or equal to MAX which is the defined constant and m is the maximum prime number less than or equal to MAX.
Auxiliary Space: O(MAX) where MAX is defined constant.
Like Article
Suggest improvement
Share your thoughts in the comments
Please Login to comment...