Dado dois inteiros positivos a
e b
, produz dois inteiros positivos c
e d
tal que:
c
dividea
d
divideb
c
ed
são co-prime- o múltiplo menos comum de
c
ed
é igual ao múltiplo menos comum dea
eb
.
Se houver mais de uma resposta possível, você poderá gerar apenas uma ou todas elas.
Casos de teste:
a b c d
12 18 4 9
18 12 9 4
5 7 5 7
3 6 1 6 or 3 2
9 9 9 1 or 1 9
6 15 2 15 or 6 5
1 1 1 1
Isso é código-golfe . A resposta mais curta em bytes vence.
code-golf
arithmetic
number-theory
Freira Furada
fonte
fonte
d
divideb
Respostas:
Geléia ,
2113 bytesExperimente online!
Em outras palavras: comece com (c, d) = (a, b) . Então, para cada privilegiada, divisão que o primeiro- todo o caminho para fora da fatoração de qualquer c ou d : o que tem o menor expoente para que prime. (Nesta implementação, em caso de empate, c perde seu expoente.)
Portanto, se a = 2250 = 2 1 · 3 2 · 5 3 e b = 360 = 2 3 · 3 2 · 5 1 ,
em seguida, c = 2 0 · 3 0 · 5 3 = 125 e d = 2 3 · 3 2 · 5 0 = 72 .
Jonathan Allan jogou uns incríveis 8 bytes! Obrigado ~
fonte
ÆEZ×Ụ’$€$ZÆẸ
[1,18]
para[15,18]
. A versão inicial estava retornando a resposta correta ([5,18]
).ÆEz®0iṂ$¦€ZÆẸ
deve fazer o truque para 13.R,
143139123 bytes(Obrigado a @ Giuseppe por esses 19 bytes de folga!)
Com recuos, novas linhas e algumas explicações:
Casos de teste:
fonte
!
tem maior precedência que&
e|
mas menor que+
e*
; você deve conseguir jogar alguns bytes dessa maneira; ou seja,!i%%q&j%%q
deve ser equivalente a!i%%q+j%%q
GCD(c,d)==1
, entãoLCM(c,d)==c*d
. Assim, podemos testarGCD(c,d)==1
e, em seguida, verificar sec*d==a*b/GCD(a,b)
uma vez que este éLCM(a,b)
...a*b/GCD(a,b)
não seja menor queLCM(a,b)
).Casca , 10 bytes
Força bruta. Pega e devolve listas e também trabalha por mais de dois números. Experimente online!
Explicação
fonte
Mathematica, 82 bytes
fonte
Select[...][[1]]
vez deFirst@Select[...]
salvar um byte?#&@@
em vez de[[1]]
salvar mais um ;-)JavaScript (ES6),
908480 bytesRecebe entrada na sintaxe de curry
(a)(b)
e retorna uma matriz de 2 números inteiros.Casos de teste
Mostrar snippet de código
Quão?
fonte
MATL ,
1716 bytesExperimente online!
Mesmo método que a solução Jelly de Lynn
Já faz algum tempo desde que eu usei qualquer MATL (ou matlab), é provável que muitas melhorias sejam possíveis.
fonte
Haskell ,
50.48.474542 bytesIdéia: eu notei isso
c*d = a*b/gcd(a,b)
. Portanto, o algoritmo executa duas etapas:c' = a/gcd(a,b)
ed' = b
. Isso atende a todos os requisitos, exceto isso,c'
ed'
deve ser co-prime.e = gcd(c',d')
e depois definoc = c'*e
ed = d'/e
. Isso mantém todas as propriedades (já que os fatores combinados permanecem os mesmos), mas, como removo todos os fatores compartilhadosd
, crioc
ed
coprime.Na minha implementação,
c'
é apenas chamadoc
.Experimente online!
-3 bytes graças a Laikoni
fonte
c
economiza 3 bytes: Experimente online!05AB1E , 12 bytes
Experimente online! ou como um conjunto de testes
fonte
R , 126 bytes
Experimente online!
Este tem uma abordagem diferente (e aparentemente menos golfy) para encontrar os valores do que a outra resposta R .
Explicação:
exceto que calço todas as definições como argumentos padrão e faço todos os cálculos em uma linha para a golfiness.
fonte
J , 19 bytes
Experimente online!
Baseado na solução da @ Lynn .
Explicação
fonte
Haskell ,
9174 bytesExperimente online!
Economizou 17 bytes graças a Laikoni
fonte
u*v`div`gcd u v
salva um byte.lcm
função interna?rem a x+rem b y+gcd x y<2
deve funcionar.lcm
existia.rem a x+rem b y+gcd x y<2
funciona, e eu me pergunto serem a x+rem b y+gcd x y+lcm a b-lcm x y<2
funciona. Há simTalvez uma garantia (matemática) dissolcm a b>=lcm x y
.lcm a b>=lcm x y
porque 1.x=x1*...*xi
(decomposição primária)y=y1*...yj
,lcm x y=z1*...*zk
ondez1,...,zk
são comunsx1,...,xi
ey1,...,yj
. 2.a=u1*...*um*x1*...*xi
(decomposição primária)b=v1*...vn*y1*...yj
,lcm a b=t1*...*tl
ondet1,...,tl
são comunsu1*...*um*x1*...*xi
ev1*...vn*y1*...yj
. É óbvio quet1,...,tl
contémz1,...,zk
, assimlcm a b>=lcm x y
. Mas isso não é útil para escrever a condição como uma soma.Python 2 , 75 bytes
A entrada é tomada como uma lista, que a função modifica no local.
Experimente online!
fonte
Python 3 , 129 bytes
Experimente online! ou Experimente a suíte de testes.
Produz todas as combinações possíveis na forma de uma lista aninhada.
fonte
-~a
e-~b
pode ser reescrito comoa+1
eb+1
para facilitar a leitura: PGeléia ,
19 1514 bytes-4 com ponteiro da Freira Furada (use o divisor embutido)
Estou quase 100% certo de que essa não é a maneira de realmente fazer essa, mas aqui está uma primeira tentativa.
Vamos ver quem é melhor do que um sete ou oito byter!
Sim ... veja a resposta de Lynn com explicação!
Um link monádico que pega uma lista dos dois números e retorna uma lista de listas de possibilidades.
Experimente online!
Quão?
fonte
ÆD
, mas (ombros) do cérebro, obviamente, não na engrenagem ...Perl 6 , 72 bytes
Experimente online!
Leva uma lista (a, b). Retorna uma lista de todas as listas possíveis (c, d).
Explicação:
fonte
Python 2 ,
126121 bytesExperimente online!
fonte
Python 2 + sympy , 148 bytes
Experimente online!
-1 graças a Jonathan Frech .
Essa resposta funciona no Python 2 (não no Python 3), usando
sympy.gcd
e emsympy.lcm
vez demath.gcd
emath.lcm
que só estão disponíveis no Python 3. E sim, isso é força bruta :)fonte
Q=c==z;
(+7 bytes) no início do loop while e substituindoor(c==z)+d
poror Q+d
(-4 bytes) ec=+(c==z)or
porc=+Q or
(-4 bytes). ( TIO )+
operadord=+E
ouc=+(c==z)
para converter um booleano em um número inteiro?True
e emFalse
vez de1
e0
no sympy.+...
tem alguma utilidade.Gelatina , 13 bytes
Experimente online! Minha primeira resposta Jelly! Editar:
ÆEz0µỤ€’×µZÆẸ
também funciona para 13 bytes. Explicação:fonte
PARI / GP, 86 bytes
Isso apenas faz o que Lynn diz em sua resposta:
Se eu não contar a
f(a,b)=
parte, são 79 bytes.fonte
05AB1E ,
322624222019 bytesExperimente online! Ainda não tenho idéia de como escrever nessa linguagem, mas pelo menos não é um algoritmo de força bruta. Explicação:
fonte