Considere uma lista de inteiros. Faça uma função para retornar o número de nós da lista que possuem um número primo armazenado.
Passo 1
O enunciado pede uma função que receba o ponteiro para a cabeça de uma lista ligada de inteiros e devolva quantos nós contêm um número primo. Vamos usar dois conceitos principais: 1) percorrer uma lista ligada nó a nó; 2) testar se um inteiro é primo.
Passo 2
Definimos a função de percurso “countPrimes” que recebe o ponteiro “head” e inicializa um contador em zero. Em seguida, usamos um laço “while” para iterar por todos os nós até o ponteiro ser NULL.
Passo 3
Para cada nó, chamamos uma função auxiliar “isPrime” para verificar se o valor armazenado é primo. Se for, incrementamos o contador.
Passo 4
A função “isPrime” trata como não primos todos os valores menores que 2. Para valores ≥2, testamos divisores de 2 até
. Se encontramos algum divisor exato, não é primo; caso contrário, é primo.
Passo 5
Depois de percorrer todos os nós, a função “countPrimes” retorna o valor final do contador, que é a quantidade de números primos na lista.
Resposta
// Exemplo em C
#include <stdbool.h>
#include <math.h>
#include <stdbool.h>
#include <math.h>
// Testa se um inteiro n é primo
bool isPrime(int n) {
if (n < 2) return false;
int limite = (int)floor(sqrt(n));
for (int d = 2; d <= limite; d++) {
if (n % d == 0) return false;
}
return true;
}
bool isPrime(int n) {
if (n < 2) return false;
int limite = (int)floor(sqrt(n));
for (int d = 2; d <= limite; d++) {
if (n % d == 0) return false;
}
return true;
}
// Nó da lista ligada
typedef struct Node {
int value;
struct Node* next;
} Node;
typedef struct Node {
int value;
struct Node* next;
} Node;
// Conta quantos nós têm valor primo
int countPrimes(Node* head) {
int count = 0;
Node* current = head;
while (current != NULL) {
if (isPrime(current->value)) {
count++;
}
current = current->next;
}
return count;
}
int countPrimes(Node* head) {
int count = 0;
Node* current = head;
while (current != NULL) {
if (isPrime(current->value)) {
count++;
}
current = current->next;
}
return count;
}