Cálculo de número primo
Publicado por Sérgio Abrantes Junior (última atualização em 19/02/2020)
[ Hits: 2.237 ]
Homepage: https://br.linkedin.com/in/sergioabrantes
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.
#!/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"
Backup da database do gerenciador de pacotes RPM
Automatizar a importação de chave privada GPG (GnuPG)
Verificar e efetua o download da nova versão do antivirus McAfee
Testador de portas usando nmap
Nenhum comentário foi encontrado.
Atenção a quem posta conteúdo de dicas, scripts e tal (2)
Manutenção de sistemas Linux Debian e derivados com apt-get, apt, aptitude e dpkg
Melhorando o tempo de boot do Fedora e outras distribuições
Como instalar as extensões Dash To Dock e Hide Top Bar no Gnome 45/46
Como Atualizar Fedora 39 para 40
Instalar Google Chrome no Debian e derivados
Consertando o erro do Sushi e Wayland no Opensuse Leap 15
Instalar a última versão do PostgreSQL no Lunix mantendo atualizado
Flathub na sua distribuição Linux e comandos básicos de gerenciamento
Sistema da Coréia do Norte - Red Star OS (14)
Problemas com o Lutris e o Wine no Slackware 15.0 (1)
redirecionando saida de comando touch para o AWK[AJUDA] (18)