📜  检查数组的素数元素的和是否为素数

📅  最后修改于: 2021-04-23 20:50:50             🧑  作者: Mango

给定一个具有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)