Teste de desempenho com números primos em BASH

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

[ Hits: 7.997 ]

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

SCRIPT TESTE DE UPAR

Verifica espaço em disco

Backup com data no nome do arquivo

Script de compilação do Xorg 7.2 otimizado para Slackware 64 bits (Slamd64)

Reconexão automática para internet ADSL


  

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

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts