Crivo de Eratóstenes Simples em PHP

Publicado por Perfil removido (última atualização em 24/04/2012)

[ Hits: 5.722 ]

Download sieve001.php




Não é muito comentado, mas pode-se fazer scripts que rodem direto do terminal para tarefas corriqueiras em PHP.
Igual a Perl, Python e Shellscript.

Como o objetivo desta linguagem é ser uma página dinâmica de web (ou CGI, mais raro), essa observação passa por desapercebido.

Para rodar um script em PHP igual aos outros script, necessita-se de três coisas:

1ª Permissões de execução: "chmod +x ..."
2ª Colocar She-Bang na primeira linha: "#!/usr/bin/php"
3ª Todo o código deve estar entre as tags "<?php" e "?>".

O que estiver fora das tags será impresso na tela sem ser interpretado.

=================================================================

Este script tabula números primos. A contagem está marcada para o intervalo de 1 até 10000000 (dez milhões).

Um script em Perl de código muito similar tabulou aqui os &#324;úmeros do intervalo de um a um milhão em quase quatro segundos.

Este script fez o mesmo teste de um a um milhão em pouco menos de três, isto é um segundo a menos.

Mas o que me chamou a atenção foi que o mesmo teste para &#324;úmeros do intervalo de um a dez milhões levou em Perl 1min 17seg (um minuto e desessete segundos).

Este script aqui em "PHP de terminal" fez a mesma tabulação no intervalo de um a dez milhões em 57seg (cinquenta e sete segundos).

Essa diferença de 20 segundos é muito significante para não ser notada. Se fosse em hardware mais antigo, seria uma eternidade.

PHP mais rápido que Perl para ser usado em terminal?? Ainda é pouco para comparação.

Falta testar acessos a recursos de sistema e ver até onde vai o poder de fogo de ambas as linguagens para tarefas similares.

Desde CGI, administração de sistemas e uso em aplicativos...

Pra variar, não sei se ainda pode ser melhorado, nem onde pode falhar. Aguardo por bugs.

  



Esconder código-fonte

#!/usr/bin/php

<?php
 
   $primes = array (2, 3);
 
   $i=5; $j=0; $k=0;
 
   do {
 
      $j = 0;
      $k=sqrt($i);
 
      while ($primes[++$j]<$k && ($i%$primes[$j]));
 
      $primes[$j]>$k and array_push ($primes, $i);
 
      $i+=(($i%3==2)?2:4);
 
   } while ($i<10000000);
 
   foreach ($primes as $j) {
      echo "$j ";
   }
 
   echo "\n";

?>

Scripts recomendados

Transformar datas para gravar no banco de dados (MySQL, Postgres e outros)

Gráfico de Pizza em PHP

Jogo puzzle

Saber se acesso a aplicação web é feito pela rede interna ou externa

Lista de Tarefas - Gerenciador de Projeto Simples


  

Comentários
[1] Comentário enviado por Miqueloti em 24/04/2012 - 13:32h

Uso php em terminal combinado com shell (justamente para reduzir lentidões com manipulação de arquivos). Meus scripts em php tem por finalidade leitura de arquivos de texto para comparação de dados, raras vezes escrita em arquivos de texto e muita leitura e escrita em banco de dados.

Utilizar php para fazer scripts que rodam no terminal é funcional sim, porém dependendo do volume de informações com a qual iremos trabalhar, torna-se um pouco lenta, portanto devemos utilizar de recursos para suprir este desempenho um pouco inferior a outras linguagens em termos de desempenho em terminal.

Por outro lado (na minha opinião) é muito mais pratico desenvolver scripts em php pois já conheço consideravelmente a biblioteca de funções existentes para ser utilizadas na linguagem, sendo assim, reduzo bastante a possibilidade de reinventar a roda, e tenho muitas das vezes quase tudo pronto para a confecção de um script, bastando saber como e quando utilizar cada função.

[2] Comentário enviado por removido em 24/04/2012 - 14:16h

Conhecendo melhor uma linguagem e esta sendo flexível para outra tarefa, por que não utilizá-la?

Exatamente o que você disse, mais prático, reduz curva de aprendizado.

É um outro modo de se ver a resolução de problemas. Principalmente por lembrar muito C e shellcript.

Dos "Três Grandes Ps" (Perl, PHP, Python), PHP é o único marginalizado, constando somente em aplicação de páginas dinâmicas.

Enquanto os outros dois são aplicados a manutenção de sistemas, aplicativos, frameworks, CGI, auxíliares em configuração e instalação de distros etc.

Tiveram a pachorra de inventar um troço chamado Jython, que é um aplicativo Java simulando Python. Isso é muita loucura!

Este exemplo foi feliz porque me surpreendeu neste teste essa pequena superioridade, que preciso verificar se não houve nada que desse diferença.

Tem uma coisa pela qual tenho curiosidade e que dizem ser uma adaptação do PHP muito promissora no futuro: PHP-GTK+.

Ele funcionaria como cliente de aplicações. Dá prá criar algumas coisas junto com GLADE prá acompanhar PHP-GTK+ e depois pôr para funcionar.

O único livro de PHP-GTK+ que encontrei no Brasil não foi mais reeditado, portanto esgotado há algum tempo. Portanto não sei se é tão promissor assim, ou se foi esgotado tão brevemente pelo interesse.

*** ADD ***

Abr/13: Relançaram o livro de PHP-GTK pouco tempo depois desta postagem, ainda em 2012.

[3] Comentário enviado por emccomputadores em 24/04/2012 - 20:36h

Òtimo artigo, pode tornar o desenvolvimento bem mais simples.

[4] Comentário enviado por removido em 02/05/2012 - 09:02h

Obrigado a todos.

Acréscimo:

Uma coisa que notei no espaço em branco entre shebang e tag de php:

[code]#!/usr/bin/php

<?php[/code]

e também colocando um espaço em branco na última linha após a última tag:

[code]?>

[/code]

É que causam a saída de espaços em branco a mais na tela.

No caso de um browser, se não é perceptivo, é irrelevante.

No caso de console já chama mais a atenção.

O interpretador do PHP joga na saída o que estiver fora das duas tags, igual a qualquer coisa que sairia em browser se fosse rodado em web.



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts