Cálculo de número primo

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

[ Hits: 2.449 ]

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

CGI + Shell

Teste do /admin/scripts Alteração

Ripar CD's de aúdio

Uebevert - All in One [version 3]

Firewall iptables


  

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