O seguinte pseudocódigo verifica se um número corresponde ao conjunto de Números Primos de Mersenne, da forma 2^{n}-1, onde n é um número primo. ( \mathbf{Q 2}=\mathbf{3 , 0} pontos).
programa
{
    inclua biblioteca Matematica --> mat
        funcao inicio()
        {
            inteiro num, i, j, mersenne
            logico ver_num, ver_mer, eh_mer
            para (num = 1; num < 8; num = num + 2)
            {
                se (num <= 1)
                {
                    ver_num = falso
                }
                senao
                {
                    ver_num = verdadeiro
                    i=2
                    faca{
                        se (num % i == 0)
                        {
                            ver_num = falso
                        }
                        i=i+1
                    }
                    enquanto(i <= mat.raiz(num,2) e ver_num)
                }
                mersenne = mat.potencia(2, num) - 1
                se (mersenne <= 1)
                {
                    ver_mer = falso
                }
                senao
                {
                    j=2
                    ver_mer = verdadeiro
                    enquanto (j <= mat.raiz(mersenne,2) e ver_mer)
                    {
                        se (mersenne % j == 0)
                        {
                            ver_mer = falso
                        }
                        j=j+1
                    }
                }
                eh_mer = ver_num e ver_mer
                se(eh_mer){
                    escreva(mersenne, " é um número de Mersenne \n") //Saida
                }
            }
        }
}
num \mathbf{i} mersenne \mathbf{j} \mathbf{i}
ver_num ver_mer eh_mer saída
:------ :------ :------- :----

2.a - Quais são os valores que a variável num pode assumir? ( \mathbf{0 , 5} ponto)

2.b - Determine o resultado que será apresentado na saída do programa, na linha 50, para os diferentes valores da variável num ( \mathbf{2 , 0} pontos)
2.c - Analisando o laço faça-enquanto das linhas 19 a 26 e comparando-o com o laço enquanto das linhas 38 a 45, qual seria a diferença de usar um ou outro neste caso? ( \mathbf{0 , 5} ponto)

Passo 1

O pseudocódigo executa um laço
\text{para }(\text{num}=1;\;\text{num}<8;\;\text{num}=\text{num}+2)
e, para cada valor de \text{num}, verifica se \text{num} é primo ( \text{ver\_num}) e se
\text{mersenne} = 2^{\text{num}} - 1 é primo ( \text{ver\_mer}). Se ambos forem verdadeiros, imprime
\text{mersenne} como número de Mersenne. Precisamos responder:
2.a) valores de \text{num};
2.b) quais linhas são impressas;
2.c) diferença entre usar faça–enquanto e enquanto.

Passo 2

Para 2.a, o laço inicia em \text{num}=1, testa \text{num}<8 e incrementa de 2 em 2. Logo, os valores de \text{num} são
1,\;3,\;5,\;7.

Passo 3

Para 2.b, analisamos cada caso:
  • \text{num}=1: como \text{num}\le1, \text{ver\_num}=\text{falso} → não imprime nada.
  • \text{num}=3: \text{ver\_num}=\text{verdadeiro} e \text{mersenne}=2^{3}-1=7 é primo → imprime
    “7 é um número de Mersenne”.
  • \text{num}=5: \text{ver\_num}=\text{verdadeiro} e \text{mersenne}=2^{5}-1=31 é primo → imprime
    “31 é um número de Mersenne”.
  • \text{num}=7: \text{ver\_num}=\text{verdadeiro} e \text{mersenne}=2^{7}-1=127 é primo → imprime
    “127 é um número de Mersenne”.

Passo 4

Para 2.c, a diferença é que o laço faça { … } enquanto(condição) garante ao menos uma execução do corpo antes de testar a condição, enquanto o laço enquanto(condição) { … } avalia a condição antes de executar o corpo, podendo não executar nenhuma vez se a condição for falsa inicialmente.

Resposta

2.a) \{1,3,5,7\}
2.b)
7 é um número de Mersenne
31 é um número de Mersenne
127 é um número de Mersenne
2.c) O faça–enquanto executa o corpo uma vez antes de testar a condição; o enquanto testa primeiro e pode não executar o corpo se a condição for falsa.

Exercícios relacionados