Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

William Tabata

So falar o q precisa fazer ;D

Recommended Posts

so falar q precisa fazer e qnt tempo, so novo no forum.

nao sei qual e nivel de programacao do pessoal aqui.

mais vamo la

 

quem quiser, so dar a ideia do q criar. ;D se precisar frita um ovo na tela a gente frita ;*

Compartilhar este post


Link para o post
Compartilhar em outros sites

so novo no forum.

 

Bom @William Tabata primeiro, seja bem vindo ao fórum.

 

quem quiser, so dar a ideia do q criar. ;D se precisar frita um ovo na tela a gente frita ;*

 

Pelo visto, seu nível já está bem avançado, então, não precisa fritar ovo na tela não:

 

Crie um algorítimo em PHP que recebendo um número K, retorne os K próximos números primos maiores que 2^57 + 1

 

Para a elaboração do algorítimo estão proibido o uso das bibliotecas BC Math e GMP.

 

O prazo para elaboração do algorítimo é de uma semana, terminando no dia 24 de Abril de 2010

 

O desafio é público, quem quiser participar, basta que apresente dentro do prazo o código PHP que calcule os K números primos maiores que 2^57 + 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sou novo aqui tbm =D

Galera, onde posto a resposta?

 

E ñ entendi mto bem a pergunta, o que significa mesmo 2^57 + 1, seria o numero 2 seguidos de 57 zeros???

E em relação ao uso de biblioteca (BC Math e GMP) não tem nada haver com utilização das funções nativas do php né??

 

Valeu rapaziada, desculpa a noobada xD

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sou novo aqui tbm =D

Galera, onde posto a resposta?

 

Bem Vindo!

 

pode postar aqui mesmo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Número Primo aquele que é somente divsível por 1 e ele mesmo.

 

Em PHP o operador ^ "circunflexo" tem haver com operação de bits e não potenciação como alguns acima acharam.

No entanto é algo comum as pessoas se confundirem por exemplo em Java também não se tem um operador específico para potenciação de números.

Na verdade se quiser raciocinar mais lógicamente em PHP temos um função chamada pow(x,y) onde o x é elevado por y (só usei x e y como exemplos ali obviamente vão ser colocados números).

 

Bem aqui está meu algoritmo.

 

<?php
//numero k
$k = 5;

//numero proposto que será no caso o número 56
$numero = 2 ^ 57 + 1;
//Imprimindo o número
echo $numero . "<br />";

//Este primeiro for vai se repetir $k vezes
for ( $a = 1 ; $a <= $k [img=http-~~-//forum.imasters.com.br/public/style_emoticons/default/wink.gif] {

//pego o próximo número
$numero = $numero + 1;

/**
*Neste for vou dividir o $numero por todos os número que são menores
*do que ele no caso $b
*/
for ( $b = 2 ; $b < $numero ; $b++ ) {

//se o resto for igual a zero em algum número ele para o for
$resto = $numero % $b;
if ( $resto == 0 ) {
break;
} else {

$c = $b + 1;
//aqui se $b+1 for igual ao $numero isso quer dizer que ele só
//é dívisivel por 1 e por ele mesmo significando que é um número primo
if ( $c == $numero ) {
//armazeno o número primo
$primo[] = $numero;
//acrescento + 1 a váriavel $a até atingir $k vezes
$a++ ;
}
}
} // fim do for($b=2; $b < $numero;$b++)


} //for($a=1; $a <= $k; )
//imprimo todos os número primos
print_r( $primo );

Compartilhar este post


Link para o post
Compartilhar em outros sites

Em PHP o operador ^ "circunflexo" tem haver com operação de bits e não potenciação como alguns acima acharam.

 

Lamento que você não tenha compreendido o desafio, Diogo, todas as pessoas com quem falei conseguiram compreender.

 

Mas o desafio é sim para encontrar os K números primos maiores que (2 elevado à 57 ) mais 1; Se estivesse relacionado com OR exclusivo, nem estaria na área de desafios, concorda ?

 

A ideia do desafio é lidar com o overflow de inteiros no PHP mesmo em processadores 64 bits, para lidar com os números primos você pode utilizar curva elíptica.

 

;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Lamento que você não tenha compreendido o desafio, Diogo, todas as pessoas com quem falei conseguiram compreender.

 

Mas o desafio é sim para encontrar os K números primos maiores que (2 elevado à 57 ) mais 1; Se estivesse relacionado com OR exclusivo, nem estaria na área de desafios, concorda ?

 

A ideia do desafio é lidar com o overflow de inteiros no PHP mesmo em processadores 64 bits, para lidar com os números primos você pode utilizar curva elíptica.

Desculpem-me então pelo meu engano a todos, obviamente pela resposta acima vejo que não compreendi a questão. Tentarei então refazer o desafio novamente e postar aqui.

 

Obrigado por responder tão rapidamente me permitindo retificar-me este pequeno equívoco e me desculpando a todos novamente.Imagem Postada

Compartilhar este post


Link para o post
Compartilhar em outros sites

E ae pessoal... só vi esse desafio hoje.

 

Lá vai...

 

<?php

/**
 * @author Ricardo Andrietta Mendes - eng.rmendes@gmail.com
 * @copyright 2010-07-26
 */

/**
 * exponenciacao()
 * 
 * @param mixed $x
 * @param mixed $y
 * @return X elevado a Y
 */
function exponenciacao($x, $y)
    {
    $z = 1;
    
    //Multiplica $x por ele mesmo $y vezes
    for ($i = 0;$i < $y; $i++) 
        {
        $z *= $x;    
        }
        
    return $z;
    }
    
/**
 * primo() Sao os numeros divisiveis por 1 e por ele mesmo (possuem apenas 2 divisores)
 * 
 * @param mixed $x
 * @return 1 se $x for um numero primo, 0 caso contrario
 */
function primo($x)
    {    
    $resp = 1;
    $aux = 0;
    
    if ($x == 0)
        {
        //zero nao e primo
        $resp = 0;
        }
    elseif ($x == 1)
        {
        //1 e o primeiro numero primo
        $resp = 1;
        }
    else 
        {
        //Verifica 
        for ($i = 1 ;$i < $x  ; $i++) 
            {
            $div = $x / $i; 
            
            //Se a divisao for um inteiro, incrementa o contador de divisoes   
            if (is_int($div))
                $aux++;
            
            //Verifica se ha mais de 1 divisor, pois o proximo sera ele mesmo
            //contabilizando 3 divisores, assim, nao sera primo 
            if ($aux > 1)
                {
                //Neste caso, nao é primo e sai do loop
                $resp = 0;
                break;        
                }
            }   
        }    
    return $resp;
    }

$j = $count = 1; //Contadores
$m = $vlr_testado = exponenciacao(2, 57) +1; //1o. numero testado

$k = 5; //Quantos numeros sao desejados

while ($j <= $k) {
    if (primo(++$m) == 1)
        {
        echo  $m . ' é o '.$count++.'° primo depois de '.$vlr_testado.'<br>';            
        $j++;
        }    
}

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Nossa, só vim dar uma espiada isso me deu um nó no cérebro tenso!!!!

Esses desafios fazem jus ao nome hahahahahaa

PS: gostei do teu "Tankuim"(Tank + Pinguim) João ^^

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ricardo, seu código não está executando. Eu testei ele em 3 ambientes e em todos o tempo máximo de execução foi alcançado (60s).

 

1º meu ambiente de produção (Fedora 32-bits, PHP 5.3.2)

2º ambiente (Windows 7 32-bits, PHP 5.3.2)

3º hospedagem (Linux, PHP 5.2).

 

:(

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.