Ir para conteúdo
Fórum Script Brasil
  • 0

Tuning


Frank K Hosaka

Pergunta

No fórum do DevMedia surgiu uma questão que queria todos os números dentro do intervalo 1000 a 9999 que pudesse satisfazer essa equação:

AABB = (AA + BB)**2

O meu conhecimento em matemática é precário, o máximo que consegui resolver foi equação do 2o. grau com uma incógnita e mesmo assim quase repeti de ano.

Então, usei o PHP e achei três soluções:

<?php
for($i=1000;$i<=9999;$i++){
    $i=intval($i);
    $j=intval($i/100);
    $k=intval(($i/100-$j)*100);
    $l=($j+$k)**2;
    if($l==$i){echo "$i => $j $k => ( $j + $k)**2= $l <br>";}
}

// resultado:
2025 => 20 25 => ( 20 + 25)**2= 2025
3025 => 30 25 => ( 30 + 25)**2= 3025
9801 => 98 1 => ( 98 + 1)**2= 9801

Mas o rapaz disse que existe um outro método chamado tuning. Pesquisei no Google, e eu vi que tem algo a ver com a lentidão no banco de dados. Ou seja, eu preciso otimizar o programa para evitar o superaquecimento do processador. Então, fiz uma pequena alteração no programa, mas, para o meu azar, o novo programa encontrou 9 resultados.

<?php
for($i=1000;$i<=9999;$i++){
    $j=intval($i/100);
    $k=intval(($i/100-$j)*100);
    $l=($j+$k)**2;
    if($l>$i){$i=(intval($i/100)+1)*100;if($i>9999){exit;}}
    if($l==$i){echo "$i => $j $k => ( $j + $k)**2= $l <br>";}
}

// resultado:
1600 => 15 25 => ( 15 + 25)**2= 1600
2025 => 20 25 => ( 20 + 25)**2= 2025
2500 => 24 26 => ( 24 + 26)**2= 2500
3025 => 30 25 => ( 30 + 25)**2= 3025
3600 => 35 25 => ( 35 + 25)**2= 3600
4900 => 48 22 => ( 48 + 22)**2= 4900
6400 => 63 17 => ( 63 + 17)**2= 6400
8100 => 80 10 => ( 80 + 10)**2= 8100
9801 => 98 1 => ( 98 + 1)**2= 9801

O algorítimo é o mesmo, a única diferença é que no segundo programa o processador trabalha menos, e isso não faz o menor sentido. Ou eu fiz uma tremenda besteira que não estou conseguindo enxergar?

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

Ah, consegui achar o erro. Esqueci de fazer a prova dos nove!

 

<?php
for($i=1000;$i<=9999;$i++){
    $j=intval($i/100);
    $k=intval(($i/100-$j)*100);
    $l=($j+$k)**2;
    if($l==$i){echo "$i => $j $k => ( $j + $k)**2= $l <br>";}
    if($l>$i){$i=(intval($i/100)+1)*100;if($i>9999){exit;}}
}

// resultado:
2025 => 20 25 => ( 20 + 25)**2= 2025
3025 => 30 25 => ( 30 + 25)**2= 3025
9801 => 98 1 => ( 98 + 1)**2= 9801

 

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...