Desafio
Nesta tarefa, você receberia um número inteiro N, que deverá gerar o primo mais próximo do número inteiro.
Se o número for primo, imprima o número.
A entrada N é fornecida em uma única linha, as entradas são terminadas por EOF. O número de entradas não excederia 10000 valores.
O desafio é implementar a solução mais rápida para que ele possa processar no máximo 10.000 valores o mais rápido possível.
Entrada
299246598
211571591
71266182
645367642
924278231
Resultado
299246587
211571573
71266183
645367673
924278233
Restrições
- N é menor que 2 ^ 64
- Cuidado com os dedos, não use mais de 4096 bytes na sua solução.
- Você pode usar qualquer idioma de sua escolha, desde que não o utilize, para os primos.
- Solução mais rápida, com a complexidade de tempo mais eficiente ganha!
ADICIONADO:
Esta é uma versão mais fácil do mesmo problema (com N <2 ^ 31), para que você possa tentar verificar sua abordagem em casos menores antes de construí-la para esse problema real.
code-challenge
primes
fastest-algorithm
Quixotesco
fonte
fonte
Respostas:
Pitão
fonte
PARI GP
fonte
NextPrime[n]
trabalha estritamente aciman
assim 3 condições ....Haskell
Deve ser bem rápido. Requer o pacote
primes
, disponível no hackage.fonte
Rubi
fonte
Java
Isso leva <1 segundo até que num comece a ser maior que 10 ^ 8. Não é eficiente o suficiente, considerando que 2 ^ 64 é de cerca de 1,8 * 10 ^ 19. (Iniciou 10 ^ 15 há 6 minutos e ainda está executando o D :)
Isso sempre dá uma resposta certa, já que não usa um algoritmo probabilístico, mas paga muito por isso em termos de eficiência - 10 ^ 18 teria mais de 5 milhões de números primos na lista e ainda mais antes da peneiração. Pode melhorar isso em algum momento com um algoritmo de peneira melhor. Não espero que isso supere nenhum dos outros :)
fonte
Haskell
Isso é muito rápido e não determinístico até um grande limite. Também o meu primeiro Haskell :).
wc
diz 903b descompilado.Edit: Se alguém quiser estimar a complexidade do tempo, seja meu convidado ...
fonte