给定一个具有N个元素的数组。任务是检查数组的素数元素之和是否为素数。
例子:
Input: arr[] = {1, 2, 3}
Output: Yes
As there are two primes in the array i.e. 2 and 3.
So, the sum of prime is 2 + 3 = 5 and 5 is also prime.
Input: arr[] = {2, 3, 2, 2}
Output: No
方法:首先使用筛子找到最高达10 ^ 5的质数。然后遍历数组的所有元素。如果数字是素数,则将其加和。最后,检查总和是否为素数。如果是素色,则打印是,否则打印否。
下面是上述方法的实现:
C++
// C++ implementation of the above approach
#include
#define ll long long int
#define MAX 100000
using namespace std;
bool prime[MAX];
// Sieve to find prime
void sieve()
{
memset(prime, true, sizeof(prime));
prime[0] = prime[1] = false;
for (int i = 2; i < MAX; i++)
if (prime[i])
for (int j = 2 * i; j < MAX; j += i)
prime[j] = false;
}
// Function to check if the sum of
// prime is prime or not
bool checkArray(int arr[], int n)
{
// find sum of all prime number
ll sum = 0;
for (int i = 0; i < n; i++)
if (prime[arr[i]])
sum += arr[i];
// if sum is prime
// then return yes
if (prime[sum])
return true;
return false;
}
// Driver code
int main()
{
// array of elements
int arr[] = { 1, 2, 3 };
int n = sizeof(arr) / sizeof(arr[0]);
sieve();
if (checkArray(arr, n))
cout << "Yes";
else
cout << "No";
return 0;
}
Java
// Java implementation of the above approach
import java.io.*;
class GFG {
static int MAX =100000;
static boolean prime[] = new boolean[MAX];
// Sieve to find prime
static void sieve()
{
for(int i=0;i
Python3
# Python3 implementation of above approach
from math import gcd, sqrt
MAX = 100000
prime = [True] * MAX
# Sieve to find prime
def sieve() :
# 0 and 1 are not prime numbers
prime[0] = False
prime[1] = False
for i in range(2, MAX) :
if prime[i] :
for j in range(2**i, MAX, i) :
prime[j] = False
# Function to check if the sum of
# prime is prime or not
def checkArray(arr, n) :
# find sum of all prime number
sum = 0
for i in range(n) :
if prime[arr[i]] :
sum += arr[i]
# if sum is prime
# then return yes
if prime[sum] :
return True
return False
# Driver code
if __name__ == "__main__" :
# list of elements
arr = [1, 2, 3]
n = len(arr)
sieve()
if checkArray(arr, n) :
print("Yes")
else :
print("No")
# This code is contributed by ANKITRAI1
C#
// C# implementation of the above approach
using System;
class GFG
{
static int MAX = 100000;
static bool[] prime = new bool[MAX];
// Sieve to find prime
static void sieve()
{
for(int i = 0; i < MAX; i++)
{
prime[i] = true;
}
prime[0] = prime[1] = false;
for (int i = 2; i < MAX; i++)
if (prime[i])
for (int j = 2 * i;
j < MAX; j += i)
prime[j] = false;
}
// Function to check if the sum of
// prime is prime or not
static bool checkArray(int[] arr, int n)
{
// find sum of all prime number
int sum = 0;
for (int i = 0; i < n; i++)
if (prime[arr[i]])
sum += arr[i];
// if sum is prime
// then return yes
if (prime[sum])
return true;
return false;
}
// Driver code
public static void Main ()
{
// array of elements
int[] arr = new int[] { 1, 2, 3 };
int n = arr.Length;
sieve();
if (checkArray(arr, n))
Console.WriteLine("Yes");
else
Console.WriteLine("No");
}
}
// This code is contributed by mits
PHP
输出:
Yes
时间复杂度: O(n * log(log n))
辅助空间: O(MAX)