Teste de desempenho com números primos em BASH

Publicado por Andre Miguel (última atualização em 06/01/2010)

[ Hits: 7.605 ]

Download primos.sh




Certo dia me deparei com um bottom brincalhão que dizia: "Digite qualquer número primo de 11 dígitos para continuar". Fiquei com vontade de saber se havia tal número.

Então fiz um shellzinho para testar. Primeiros 10, beleza; primeiros 100, beleza, primeiros 1000, já não estava mais tão rápido. Percebi a oportunidade de utilizar este script como benchmark de desempenho entre servidores, sejam de mesmo hardware ou não.

Quando você executar, pode demorar a aparecer alguma coisa na tela, mas ele está rodando. Pode verificar com strace ou truss (Solaris).

Após você testar e tiver a coragem de descomentar a linha do 10000000000, me poste aqui os números primos que você achou!

Dica: para temporizar a execução, utilize a linha abaixo:

$ bash primo.sh 2>&1 |egrep 'Primo|real' |awk '{if ($2 ~ /s/){split($2,minsplit,"m");min+=minsplit[1];seg+=substr($2,3,5);}else{print min,seg; print $0; min=seg=0; }}'

Você deverá ter uma saída como esta:

0 0.1
  Primo: 11
0 0.248
  Primo: 13
0 0.587
  Primo: 17

  



Esconder código-fonte

#for (( i=10000000000; i<= 999999999999; i++)); do
for (( i=10; i<= 999; i++)); do
j=$i;
  primo=0;
time cat <<-EOF
  $(for (( j=$i; j>=1; j--)); do
   if [ `echo $((i%j))` -eq 0 ]; then
      ((primo++));
          if [ $primo -gt 2 ]; then
            j=1;
          else
            if [ $primo -eq 2 ] && [ $j -eq 1 ]; then
          echo "Primo: $i";
                fi
          fi
    fi;
  done;)
EOF
done


Scripts recomendados

Make Knoppix

Aplica quotas a partir de um arquivo gerado pelo repquota.

Instalação completa de servidor de e-mail

Agenda desenvolvida em Shell Script

Retra de iptables para DMZ na porta 80


  

Comentários
[1] Comentário enviado por uberalles em 04/03/2010 - 18:48h

Para criar a lista. Fiz do 10 ao 999:

cut -c 3- primo_10-999.out |awk 'BEGIN{print "Tempo;Primo;"} {if ($1 ~ /[0-9]/){printf $1 ";";}{if ($2 ~ /[0-9]/){print $2 ";";}}}'

[2] Comentário enviado por sebuba em 06/01/2011 - 11:53h

Muito bom!


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts