Cálculo de número primo

Publicado por Sérgio Abrantes Junior (última atualização em 19/02/2020)

[ Hits: 2.394 ]

Homepage: https://br.linkedin.com/in/sergioabrantes

Download numeroPrimoRange




numeroPrimoRange

Shell script que mostra os números primos encontrados num range de números informados na execução. Ao final mostra o total de números primos encontrados.

Otimizações de código:

    Número 2 é o único número par. Se for número par diferente de 2, finaliza a análise.
    Analisa até o divisor ser no máimo sua metade:
    Ex: Número informado = 10
    Ele checará até o 5 no máximo.
    Encontrado um divisor em qualquer parte da análise, segue para o próximo número.

  



Esconder código-fonte

#!/usr/bin/env bash
# shellcheck disable=SC2162
# Prove: NumeroPrimoRange
# Descricao Curta: Encontra números primos num range
# Descrição Longa: Encontra números primos num range informado.
#               Ao final mostra o total de números encontrados
# Frequencia: Sob demanda
# Autor: Sérgio Abrantes
# Contato: sergioabrantes@gmail.com
# Site: https://github.com/sergioabrantesjunior/numeroPrimoRange
#
#
# Histórico:
#
#    v1.0.0 2019-01-01, Sérgio Abrantes:
#       - Versão inicial do script

: '
Conceito básico: o número primo é um número que é divisível somente por 1 e por ele mesmo.
Caso possua mais divisores, não é número primo, mas sim número composto.
Exemplos:

1) 2 tem apenas os divisores 1 e 2, portanto 2 é um número primo (único primo par).
2) 17 tem apenas os divisores 1 e 17, portanto 17 é um número primo.
3) 10 tem os divisores 1, 2, 5 e 10, portanto 10 não é um número primo.
'

clear
read -p "Será analisado número primo do 1 até: " range
contaPrimos=0

for ((numeroAnalisado=1;numeroAnalisado<=range;numeroAnalisado++));do

   : '
   Abaixo testamos as segiuntes condições:
   1) Número é 2
   2) Número é diferente de 1 (já que é sempre será primo) e ímpar
   Satisfazendo essas condições, continua a análise.
   '

   if [ "$numeroAnalisado" = 2 ] || [[ "$numeroAnalisado" != 1  &&  "$(( numeroAnalisado % 2 ))" = 1 ]];then
      primo=1
      
      : '
      Como todo número divisível por 1 é primo e divisor 2 já foi testado acima, 
      iniciamos os próximos testes a partir do divisor 3 até o ( $número / 2) 
      mais da metade dele não será e se for ímpar, condição testada acima.
      '
      
      contadorLoop=3
      while [[ "$contadorLoop" -lt "$(( numeroAnalisado / 2 ))" && "$primo" = 1 ]];do
         if [ "$(( numeroAnalisado % contadorLoop ))" = 0 ];then
            primo=0
            break
         fi
         contadorLoop=$(( contadorLoop + 1 ))
      done

      if [ "$primo" = 1 ];then
         echo "Encontrato o número primo: $numeroAnalisado"
         contaPrimos=$(( contaPrimos + 1 ))
      fi               
   fi
done

echo "Encontrado $contaPrimos números primos de 1 até $range"

Scripts recomendados

Uebevert - All in 1

Download em série com o AXEL

Script para gravar CD

Reinicia todos os trabalhos de todas as filas CUPS

WPA Supplicant


  

Comentários

Nenhum comentário foi encontrado.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts