Há um número bastante grande de funções geradoras primárias. Praticamente todos eles são construídos e são baseados na peneira de Eratóstenes, na função de Möbius ou no teorema de Wilson e geralmente são inviáveis de calcular na prática. Mas também existem geradores, que possuem uma estrutura muito fácil e foram encontrados por acidente.
Em 2003, Stephen Wolfram explorou uma classe de equações de recorrência aninhadas em um experimento com computador ao vivo na NKS Summer School. Um grupo de pessoas ao redor de Matthew Frank seguiu com experimentos adicionais e descobriu uma propriedade interessante da simples recorrência
a(n) = a(n-1) + gcd(n,a(n-1))
com o valor inicial de a(1) = 7
. A diferença a(n) - a(n-1) = gcd(n,a(n-1))
sempre parecia ser 1 ou primo. As primeiras diferenças são ( OEIS A132199 ):
1, 1, 1, 5, 3, 1, 1, 1, 1, 11, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 23, 3, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 47, 3, 1, 5, 3, ...
Se omitirmos apenas os 1s, obteremos a seguinte sequência ( OEIS A137613 ):
5, 3, 11, 3, 23, 3, 47, 3, 5, 3, 101, 3, 7, 11, 3, 13, 233, 3, 467, 3, 5, 3,
941, 3, 7, 1889, 3, 3779, 3, 7559, 3, 13, 15131, 3, 53, 3, 7, 30323, 3, ...
Eric S. Rowland provou a primidez de cada elemento nesta lista alguns anos depois. Como você pode ver, os números primos são misturados e alguns deles aparecem várias vezes. Também foi comprovado que a sequência inclui infinitamente muitos primos distintos. Além disso, é conjecturado que todos os números primos ímpares apareçam.
Como esse gerador principal não foi construído, mas simplesmente encontrado por acidente, o gerador primário é chamado de "ocorrência natural". Mas observe que, na prática, esse gerador também é bastante inviável de calcular. Como se vê, um primo p aparece somente após (p–3)/2
1s consecutivos. Não obstante, implementar este gerador principal será sua tarefa.
Desafio:
Escreva uma função ou um programa que imprima os primeiros n
elementos da sequência A137613
(a sequência sem os 1s). Você pode ler o número de entrada n >= 0
via STDIN, argumento de linha de comando, prompt ou argumento de função. Envie os primeiros n
elementos em qualquer formato legível para STDOUT ou retorne uma matriz ou uma lista com esses valores.
Isso é código-golfe. Portanto, o código mais curto vence.
Entre os melhores:
Aqui está um snippet de pilha para gerar uma classificação regular e uma visão geral dos vencedores por idioma. Para garantir que sua resposta seja exibida, inicie-a com um título, usando o seguinte modelo de remarcação:
# Language Name, N bytes
onde N é o tamanho do seu envio. Se você melhorar sua pontuação, poderá manter as pontuações antigas no título, identificando-as. Por exemplo:
# Ruby, <s>104</s> <s>101</s> 96 bytes
a(n)-a(n-1)
n
ser zero?
//
) e explique-o no seu envio. Se alguém discordar de você, você sempre pode editar sua postagem.