Producto de cada K-ésimo número primo en una array

Dado un entero ‘k’ y una array de enteros ‘arr’ (menos de 10^6), la tarea es encontrar el producto de cada K-ésimo número primo en la array.
Ejemplos: 
 

Entrada: arr = {2, 3, 5, 7, 11}, k = 2 
Salida: 21 
Todos los elementos del arreglo son primos. Entonces, los números primos después de cada intervalo K (es decir, 2) son 3, 7 y su producto es 21. 
Entrada: arr = {41, 23, 12, 17, 18, 19}, k = 2 
Salida: 437 
 

Un enfoque simple: Recorra la array y encuentre cada K-ésimo número primo en la array y calcule el producto corriente. De esta manera, tendremos que verificar cada elemento de la array, ya sea que sea primo o no, lo que llevará más tiempo a medida que aumente el tamaño de la array.
Enfoque eficiente: Cree un tamiz que almacene si un número es primo o no. Entonces, se puede usar para comparar un número con primo en tiempo O(1). De esta manera, solo tenemos que realizar un seguimiento de cada número primo K’th y mantener el producto en ejecución.
A continuación se muestra la implementación del enfoque anterior: 
 

C++

// C++ implementation of the approach
#include <bits/stdc++.h>
using namespace std;
#define MAX 1000000
bool prime[MAX + 1];
void SieveOfEratosthenes()
{
    // Create a boolean array "prime[0..n]"
    // and initialize all the entries as true.
    // A value in prime[i] will finally be false
    // if i is Not a prime, else true.
    memset(prime, true, sizeof(prime));
 
    // 0 and 1 are not prime numbers
    prime[1] = false;
    prime[0] = false;
 
    for (int p = 2; p * p <= MAX; p++) {
 
        // If prime[p] is not changed,
        // then it is a prime
        if (prime[p] == true) {
 
            // Update all multiples of p
            for (int i = p * 2; i <= MAX; i += p)
                prime[i] = false;
        }
    }
}
 
// compute the answer
void productOfKthPrimes(int arr[], int n, int k)
{
    // count of primes
    int c = 0;
 
    // product of the primes
    long long int product = 1;
 
    // traverse the array
    for (int i = 0; i < n; i++) {
 
        // if the number is a prime
        if (prime[arr[i]]) {
 
            // increase the count
            c++;
 
            // if it is the K'th prime
            if (c % k == 0) {
                product *= arr[i];
                c = 0;
            }
        }
    }
    cout << product << endl;
}
 
// Driver code
int main()
{
 
    // create the sieve
    SieveOfEratosthenes();
 
    int n = 5, k = 2;
 
    int arr[n] = { 2, 3, 5, 7, 11 };
 
    productOfKthPrimes(arr, n, k);
 
    return 0;
}

Java

// Java implementation of the approach
 
class GFG
{
static int MAX=1000000;
static boolean[] prime=new boolean[MAX + 1];
static void SieveOfEratosthenes()
{
    // Create a boolean array "prime[0..n]"
    // and initialize all the entries as true.
    // A value in prime[i] will finally be false
    // if i is Not a prime, else true.
    //memset(prime, true, sizeof(prime));
 
    // 0 and 1 are not prime numbers
    prime[1] = true;
    prime[0] = true;
 
    for (int p = 2; p * p <= MAX; p++) {
 
        // If prime[p] is not changed,
        // then it is a prime
        if (prime[p] == false) {
 
            // Update all multiples of p
            for (int i = p * 2; i <= MAX; i += p)
                prime[i] = true;
        }
    }
}
 
// compute the answer
static void productOfKthPrimes(int arr[], int n, int k)
{
    // count of primes
    int c = 0;
 
    // product of the primes
    int product = 1;
 
    // traverse the array
    for (int i = 0; i < n; i++) {
 
        // if the number is a prime
        if (!prime[arr[i]]) {
 
            // increase the count
            c++;
 
            // if it is the K'th prime
            if (c % k == 0) {
                product *= arr[i];
                c = 0;
            }
        }
    }
    System.out.println(product);
}
 
// Driver code
public static void main(String[] args)
{
 
    // create the sieve
    SieveOfEratosthenes();
 
    int n = 5, k = 2;
  
    int[] arr=new int[]{ 2, 3, 5, 7, 11 };
  
    productOfKthPrimes(arr, n, k);
}
}
// This code is contributed by mits

Python 3

# Python 3 implementation of the approach
 
MAX = 1000000
prime = [True]*(MAX + 1)
def SieveOfEratosthenes():
     
    # Create a boolean array "prime[0..n]"
    # and initialize all the entries as true.
    # A value in prime[i] will finally be false
    # if i is Not a prime, else true.
     
 
    # 0 and 1 are not prime numbers
    prime[1] = False;
    prime[0] = False;
 
    p = 2
    while p * p <= MAX:
 
        # If prime[p] is not changed,
        # then it is a prime
        if (prime[p] == True):
 
            # Update all multiples of p
            for i in range(p * 2, MAX+1, p):
                prime[i] = False
        p+=1
 
# compute the answer
def productOfKthPrimes(arr, n, k):
 
    # count of primes
    c = 0
 
    # product of the primes
    product = 1
 
    # traverse the array
    for i in range( n):
 
        # if the number is a prime
        if (prime[arr[i]]):
 
            # increase the count
            c+=1
 
            # if it is the K'th prime
            if (c % k == 0) :
                product *= arr[i]
                c = 0
 
    print(product)
 
# Driver code
if __name__ == "__main__":
 
    # create the sieve
    SieveOfEratosthenes()
 
    n = 5
    k = 2
 
    arr = [ 2, 3, 5, 7, 11 ]
 
    productOfKthPrimes(arr, n, k)
 
# This code is contributed by ChitraNayal

C#

// C# implementation of the approach
class GFG
{
static int MAX = 1000000;
static bool[] prime = new bool[MAX + 1];
static void SieveOfEratosthenes()
{
    // Create a boolean array "prime[0..n]"
    // and initialize all the entries as
    // true. A value in prime[i] will
    // finally be false if i is Not a prime,
    // else true.
 
    // 0 and 1 are not prime numbers
    prime[1] = true;
    prime[0] = true;
 
    for (int p = 2; p * p <= MAX; p++)
    {
 
        // If prime[p] is not changed,
        // then it is a prime
        if (prime[p] == false)
        {
 
            // Update all multiples of p
            for (int i = p * 2;
                     i <= MAX; i += p)
                prime[i] = true;
        }
    }
}
 
// compute the answer
static void productOfKthPrimes(int[] arr,
                               int n, int k)
{
    // count of primes
    int c = 0;
 
    // product of the primes
    int product = 1;
 
    // traverse the array
    for (int i = 0; i < n; i++)
    {
 
        // if the number is a prime
        if (!prime[arr[i]])
        {
 
            // increase the count
            c++;
 
            // if it is the K'th prime
            if (c % k == 0)
            {
                product *= arr[i];
                c = 0;
            }
        }
    }
    System.Console.WriteLine(product);
}
 
// Driver code
static void Main()
{
 
    // create the sieve
    SieveOfEratosthenes();
 
    int n = 5, k = 2;
 
    int[] arr=new int[]{ 2, 3, 5, 7, 11 };
 
    productOfKthPrimes(arr, n, k);
}
}
 
// This code is contributed by mits

Javascript

<script>
// Javascript implementation of the approach
 
let MAX = 1000000;
let prime = new Array(MAX + 1);
function SieveOfEratosthenes() {
    // Create a boolean array "prime[0..n]"
    // and initialize all the entries as true.
    // A value in prime[i] will finally be false
    // if i is Not a prime, else true.
    prime.fill(true)
 
    // 0 and 1 are not prime numbers
    prime[1] = false;
    prime[0] = false;
 
    for (let p = 2; p * p <= MAX; p++) {
 
        // If prime[p] is not changed,
        // then it is a prime
        if (prime[p] == true) {
 
            // Update all multiples of p
            for (let i = p * 2; i <= MAX; i += p)
                prime[i] = false;
        }
    }
}
 
// compute the answer
function productOfKthPrimes(arr, n, k) {
    // count of primes
    let c = 0;
 
    // product of the primes
    let product = 1;
 
    // traverse the array
    for (let i = 0; i < n; i++) {
 
        // if the number is a prime
        if (prime[arr[i]]) {
 
            // increase the count
            c++;
 
            // if it is the K'th prime
            if (c % k == 0) {
                product *= arr[i];
                c = 0;
            }
        }
    }
    document.write(product + "<br>");
}
 
// Driver code
 
// create the sieve
SieveOfEratosthenes();
 
let n = 5, k = 2;
 
let arr = [2, 3, 5, 7, 11];
 
productOfKthPrimes(arr, n, k);
 
// This code is contributed by gfgking.
</script>
Producción: 

21

 

Complejidad de tiempo : O(n)

Espacio Auxiliar: O(MAX)
 

Publicación traducida automáticamente

Artículo escrito por VishalBachchas y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *