2013 tem a fatoração principal 3*11*61
. 2014 tem a fatoração principal 2*19*53
. Uma propriedade interessante em relação a estes fatorações é que existem números primos distintos nas fatorações de 2013 e 2014 que soma para o mesmo número: 11+61=19+53=72
.
Escreva um programa ou função que tenha como entrada dois números inteiros positivos maiores que 1 e retorne um valor verdadeiro se existir uma soma dos fatores primos selecionados de um número que seja igual a uma soma dos fatores primos selecionados no segundo número e um valor falsey caso contrário.
Esclarecimentos
- Mais de dois fatores principais podem ser usados. Nem todos os fatores primos do número precisam ser usados na soma. Não é necessário que o número de números primos usados nos dois números seja igual.
- Mesmo que um primo seja elevado a uma potência maior que 1 na fatoração de um número, ele pode ser usado apenas uma vez na soma dos primos do número.
- 1 não é primo.
- Os dois números de entrada serão menores que
2^32-1
.
Casos de teste
5,6
5=5
6=2*3
5=2+3
==>True
2013,2014
2013=3*11*61
2014=2*19*53
11+61=19+53
==>True
8,15
8=2^3
15=3*5
No possible sum
==>False
21,25
21=3*7
25=5^2
No possible sum (can't do 3+7=5+5 because of exponent)
==>False
Isso é código de golfe. Aplicam-se regras padrão. O menor código em bytes vence.
true
, pois eles compartilham o fator7
?Respostas:
Julia,
9593 bytesA função principal é
f
e chama uma função auxiliarg
.Ungolfed:
Guardado 2 bytes graças a Darth Alephalpha
fonte
map(p->map
é mais curto que(m=map)(p->m
.Pitão, 11 bytes
Entrada no formulário
30,7
.fonte
Pitão -
171211 bytesObrigado a @FryAmTheEggman por corrigir minha resposta e salvar um byte.
Conjunto de Teste .
fonte
ty
obras e salva um tchau?Haskell,
115106 bytesExemplo de uso:
2013 # 2014
->True
.p
faz uma lista de todos os fatores principais de seu argumento, remove duplicatas, faz uma lista de todas as subsequências, descarta a primeira (que é sempre a lista vazia) e finalmente soma as subsequências.#
verifica sep a
não é igual à diferençap a \\ p b
. Se não forem iguais, eles têm pelo menos um elemento comum.fonte
Japt, 25 bytes
Saídas
true
oufalse
. Experimente online!Ungolfed e explicação
Para um byte extra, é possível dividir o código fatorize-unique-combine-sum entre as duas entradas, com a vantagem adicional de ter uma complexidade de tempo de
O(O(25-byte version)^2)
:fonte
CJam, 23 bytes
Teste aqui.
O valor verdadeiro será todas as somas comuns concatenadas, o valor falso é a sequência vazia.
Explicação
fonte
Braquilog ,
109 bytesExperimente online!
O predicado consegue retornar,
[the sum, the sum]
se existir, e falha se a soma não existir.-1 byte graças a Fatalize (o criador do Brachylog), lembrando-me que o meta-predicado de verificação existe.
fonte
ᵛ - verify
vez deˢ=
salvar um byte.MATL , 23 bytes
Usa a versão atual, 2.0.2 , anterior a esse desafio.
Os números são fornecidos como duas entradas separadas. A saída é
0
ou1
.Exemplo
Explicação
fonte
Mathematica, 58 bytes
Explicação:
Esta é uma função anônima.
Primeiro,
IntersectingQ
verifica se duas listas estão se cruzando. Mas as entradas são números em vez de listas, portanto, não são avaliadas. Por exemplo, se as entradas forem2013
e2014
, entãoIntersectingQ@##&
retornaráIntersectingQ[2013, 2014]
.Tr/@Rest@Subsets[#&@@@FactorInteger@#]&
é outra função anônima que pega um número inteiro, obtém uma lista de seus fatores primos sem repetições, pega o conjunto de potência, remove o conjunto vazio e, em seguida, pega a soma de cada conjunto. EntãoTr/@Rest@Subsets[#&@@@FactorInteger@#]&[2013]
retorna{3, 11, 61, 14, 64, 72, 75}
.Em seguida, mapeie
Tr/@Rest@Subsets[#&@@@FactorInteger@#]&
a expressãoIntersectingQ[2013, 2014]
.Tr/@Rest@Subsets[#&@@@FactorInteger@#]&[2013]
eTr/@Rest@Subsets[#&@@@FactorInteger@#]&[2014]]
são listas, para que possamos obter o resultado da coleta neste momento.fonte
IntersectingQ
primeiro é incrível! :)PARI / GP , 98 bytes
Fatore, pegue primes (
[,1]
), faça um loop sobre subconjuntos não vazios, soma e uniq e, em seguida, intercepte o resultado disso para os dois números. O valor retornado é o número de interseções, que é verdade, a menos que sejam 0.fonte
APL (Dyalog Extended) ,
2317 bytes SBCS-5 graças a ngn
Função de infixo tácito anônimo.
Experimente online!
⍥{
…}
Aplique a seguinte função anônima aos dois argumentos:⍭
fatores principais⍤
então∪
os únicos daqueles0+⍀.,
redução da tabela de adição de zero concatenada para cada fator∊
ε nlist (achatar)∩
o cruzamento⍤
então≢
a contagem daqueles1<
Existe mais de um? (um porque a soma de nenhum fator)fonte
p+.×⊤1↓⍳2*≢p←
->1↓∊(⊢,+)/0,⍨
1↓∊∘.+/0,¨
1↓∊0∘.+.,
um produto inouter - com que frequência você vê isso :)⍥
corretamente, isso deve funcionar também:1<∘≢∩⍥{∊0∘.+.,∪⍭⍵}
05AB1E ,
108 bytes-2 bytes graças a @Emigna .
Experimente online ou verifique todos os casos de teste .
Explicação:
fonte
f€æO`å¦à
deve funcionar para 8.Japonês, 12 bytes
Execute-o online
fonte
Python 3 , 206 bytes
Essa é uma função lambda (m), que recebe 2 números e retorna um conjunto que contém somas de fatores primos que eles têm em comum. Em Python, esse é um valor verdadeiro quando não vazio e um valor falsey quando vazio.
Edit: Acontece que minha resposta original não funcionou para entradas principais, como apontado por @JoKing. Isso foi corrigido (junto com alguns outros bugs) pelo custo trágico de 40 bytes.
Explicação rápida usando comentários:
Experimente online!
fonte
5,6
, pois não trata de entradas principaisAPL (NARS), 50 caracteres, 100 bytes
aqui π encontraria a matriz de fatores em seu argumento;
seria a função que encontra todos os subconjuntos ... eu tenho que dizer que parece {operador itsArguments} ¨ (para cada esquerda) e ¨ (para cada direita) podem imitar um loop com número fixo de ciclos e ¨¨ está ok em ver subconjuntos de um conjunto ... dessa maneira, parece reduzir símbolos nos loops de descrição ...; teste
Uma pequena análise:
fonte
Japonês
-¡
, 14 bytesGuardado 3 bytes graças a @Shaggy
Tente
fonte
ÎfUÌ l
ou, mais curta aindarf l
,.rø
seria a maneira mais curta de fazer isso, mas Oliver venceu você.Geléia ,
189 bytesExperimente online!
Obrigado a Jonathan Allan por -9 e pela incrível ajuda :).
Recebe entrada como uma matriz de dois elementos. Explicação do código:
¹
fonte
,
. OẒƇ
é redundante, não há fatores primos não primos. EntãoÆFḢ€
é justoÆf
, exceto que o último nos dá as repetições que realmente precisamos, por exemplo26=2*13
e por125=5*5*5
enquanto2+13=5+5+5
. Mesmo com isso, porém,Ẇ
não é bom o suficiente, por exemplo, em vez de26
usar, o182=2*7*13
que também deve achar isso,2+13=5+5+5
mas não o faz - em vez disso, queremos o power-set (ŒP
) sem o elemento inicial, vazio, (podemos usarḊ
).S€
aqui pode ser substituído por§
. - Você provavelmente pode salvar bytes com$
eƊ
-.)
e com minhas correções para fazê-lo funcionar corretamente (mais substituindoœ&
porf
) o código é de 9 bytes:ÆfŒPḊ§)f/
try-itGaia ,
1611 bytesExperimente online!
A função superior (primeira linha) calcula as somas do conjunto de potências de fatores primos e a segunda função descobre se algum dos elementos da interseção é diferente de zero.
fonte