Definição
- Dois números inteiros são coprime se eles não compartilharem outros divisores comuns positivos
1
. a(1) = 1
a(2) = 2
a(n)
é o menor inteiro positivo que é coprime aoa(n-1)
ea(n-2)
e ainda não apareceu, por inteiron >= 3
.
Tarefa
- Dado inteiro positivo
n
, saída / impressãoa(n)
.
Exemplo
a(11) = 6
porque6
é coprime com os dois últimos predecessores (ou seja,11
e13
) e6
não apareceu antes.
Notas
- Observe que a sequência não está em ascensão, o que significa que um elemento pode ser menor que seu predecessor.
Especificações
- Você deve usar 1 indexado.
Casos de teste
n a(n)
1 1
2 2
3 3
4 5
5 4
6 7
7 9
8 8
9 11
10 13
11 6
12 17
13 19
14 10
15 21
16 23
17 16
18 15
19 29
20 14
100 139
1000 1355
10000 13387
100000 133361
Pontuação
- Como coprime significa que os dois números compartilham apenas um divisor (
1
) e1
é um número pequeno, seu código deve ser o menor possível em termos de contagem de bytes.
Referências
- OEIS A084937
code-golf
sequence
number-theory
Freira Furada
fonte
fonte
Respostas:
Python 3.5,
160141126124121109 bytesEsta é uma implementação simples da definição da sequência. Sugestões de golfe são bem-vindas.
Edit: -17 bytes graças a Leaky Nun. -9 bytes graças a Peter Taylor. -6 bytes graças ao Sp3000 e alternando para o Python 3.5.
Ungolfing:
fonte
import math
em seguida,g=math.gcd
deve ser mais curto do que definir o seu própriog
. Pois antes de 3.5, você pode fazerfrom fractions import*
paragcd
.c=3
dentro do loop, precisará fazê-lo apenas uma vez. Pela minha conta você economiza 3 caracteres.r=[c]+r
, em vez de+=
, mas três índices negativos tornar-se positivo. E há ainda mais economia de 2 caracteres na reescrita como lambda, embora essa seja uma mudança bastante drástica:from fractions import*;F=lambda n,r=[2,1],c=3:n<2and r[1]or(c in r)+gcd(r[0]*r[1],c)<2and F(n-1,[c]+r)or F(n,r,c+1)
e não é necessário,print
porque não é mais um programa completo.MATL ,
2827 bytesO código é lento, mas fornece o resultado correto.
Experimente online! Ou verifique os dez primeiros casos .
Uma pequena modificação do código produz um gráfico da sequência:
Veja isso como arte ASCII ou com saída gráfica no compilador offline:
Explicação
fonte
C, 185 bytes
fonte
Na verdade ,
383735333130 bytesEsta é uma implementação simples da definição de função. Sugestões de golfe são bem-vindas. Experimente online!
Edit: -3 bytes graças a Leaky Nun.
Ungolfing:
fonte
Haskell,
8173 bytesExemplo de uso:
((0:1:c[2,1])!!) 12
->17
.Crie a lista de todos
a(n)
, começando com0
para corrigir o índice baseado em 11
e seguido porc[2,1]
.c
assume o topo da lista de argumentosl
seguida por uma chamada recursiva com o próximo número que se encaixa (co-prime, nunca visto antes) adicionado à frentel
. Escolha on
elemento th desta lista.fonte
R, 141 bytes
destroçado
fonte
Mathematica,
9790 bytesBaseado na
minha conjectura de quea(n) < 2n
para todosn
.Para obter uma execução mais rápida, adicione
a@n=
depois do original:=
para que a função não precise recalcular os valores anteriores .Salvo 7 bytes graças a Sherlock9 (se
gcd(a,b)=1
, em seguida,gcd(ab,m) = gcd(a,m)*gcd(b,m)
)fonte
ABS(a(n)-n) < n
"n
.Pitão, 23 bytes
Suíte de teste
Uma implementação bastante simples, mas com alguns bons truques de golfe.
fonte