Cálculo de número perfeito range

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

[ Hits: 1.132 ]

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

Download NumeroPerfeitoRange




numeroPerfeitoRange

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

Otimizações de código:

    Analisa até o divisor ser no máximo sua metade:
    Ex.: Número informado = 10
    Ele checará até o 5 no máximo.

  



Esconder código-fonte

#!/usr/bin/env bash
# shellcheck disable=SC2162
# Prove: NumeroPerfeitoRange
# Descricao Curta: Verifica se número informado é perfeito
# Descrição Longa: Verifica se número informado é perfeito
# Frequencia: Sob demanda
# Autor: Sérgio Abrantes
# Contato: sergioabrantes@gmail.com
# Site: https://github.com/sergioabrantesjunior/numeroPerfeitoRange
#
#
# Histórico:
#
#    v1.0.0 2020-01-17, Sérgio Abrantes:
#       - Versão inicial do script
: '
Em Matemática, um número perfeito é um número inteiro para o qual a soma de todos os seus divisores positivos próprios (excluindo ele mesmo) é igual ao próprio número.

Por exemplo, o número 6 é um número perfeito, pois:

6 = 1 + 2 + 3

O próximo número perfeito é o 28, pois:

28 = 1+ 2+ 4+ 7+ 14

Os quatro primeiros números perfeitos (6, 28, 496 e 8.128) eram os únicos conhecidos pelos gregos antigos desde pelo menos Euclides. No século XV acrescentou-se 33.550.336 à lista.

 

O conjunto dos números perfeitos é:

{6, 28, 496, 8128, 33550336, 8589869056, …}
'

#set -x
clear
read -p "Digite um número: " range
contaPerfeito=0

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

   contadorLoop=1
   somaDivisoresInteiros=0
   while [[ "$contadorLoop" -le "$((numeroAnalisado / 2))" ]];do
      if [ "$(( numeroAnalisado % contadorLoop ))" = 0 ];then
         somaDivisoresInteiros=$((somaDivisoresInteiros + contadorLoop))
      fi   
      contadorLoop=$((contadorLoop + 1))
   done

   if [ "$somaDivisoresInteiros" -eq "$numeroAnalisado" ];then
      echo "O Número $numeroAnalisado é perfeito"
      contaPerfeito=$(( contaPerfeito + 1 ))
   fi

done

echo "Encontrado $contaPerfeito números perfeitos de 1 até $range"

Scripts recomendados

usando o jSMS direto do pendrive (v2.0)

Renomear legendas srt de filmes e séries

fwgen - gerador de regras de firewall iptables

Firewall funcional

MURFEX (MUltiple Rar File EXtractor)


  

Comentários
[1] Comentário enviado por maurixnovatrento em 28/05/2020 - 14:12h


Muito bom.

___________________________________
Conhecimento não se Leva para o Túmulo.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts