Descrição do Desafio
Um número de Smith é um número composto cuja soma dos dígitos é igual à soma da soma dos dígitos de seus fatores primos. Dado um número inteiro N
, determine se é um número Smith ou não.
Os primeiros números são Smith 4
, 22
, 27
, 58
, 85
, 94
, 121
, 166
, 202
, 265
, 274
, 319
, 346
, 355
, 378
, 382
, 391
, 438
(sequência A006753 em OEIS).
Entrada / saída de amostra
18: False (sum of digits: 1 + 8 = 9; factors: 2, 3, 3; sum of digits of factors: 2 + 3 + 3 = 8)
22: True
13: False (meets the digit requirement, but is prime)
666: True (sum of digits: 6 + 6 + 6 = 18; factors: 2, 3, 3, 37; sum of digits of factors: 2 + 3 + 3 + 3 + 7 = 18)
-265: False (negative numbers can't be composite)
0: False (not composite)
1: False (not composite)
4937775: True
Notas
- Seu código pode ser uma função (método) ou um programa de trabalho completo,
- Em vez de palavras como
True
eFalse
, você pode usar valores de verdade e falsidade, desde que fique claro o que são, - Este é um desafio de código-golfe , portanto, faça seu código o mais curto possível!
code-golf
math
number-theory
decision-problem
shooqie
fonte
fonte
Respostas:
Geléia ,
1211 bytesRetorna 1 para números de Smith e 0 caso contrário. Experimente online! ou verifique todos os casos de teste .
fundo
Æf
(fatoração primária) eD
(número inteiro em decimal) são implementados para queP
(produto) eḌ
(número decimal em número inteiro) constituam inversos à esquerda.Para os inteiros -4 a 4 ,
Æf
retorna o seguinte.Para os números -10, -1, -0,5, 0, 0,5, 1, 10 ,
D
retorna o seguinte.Como funciona
fonte
Python 2,
122115110106 bytesGuardado 4 bytes graças a Dennis
Experimente em ideone.com
Explicação
Lê um número em stdin e gera
True
se o número for um número Smith ouFalse
se não for.fonte
print n<m>s==sum(map(int,`m`))
.Braquilog , 19 bytes
Experimente online!
Explicação
fonte
_
(chamado de menos menos ).05AB1E ,
1117 bytesExplicação
Experimente online!
fonte
PowerShell v3 +, 183 bytes
Nenhuma verificação básica incorporada. Sem fatoração interna. Sem soma de dígitos incorporada. Tudo feito à mão. : D
Recebe a entrada
$n
como um número inteiro, define$b
igual a uma matriz vazia. Aqui$b
está nossa coleção de fatores principais.Em seguida é um
for
loop. Primeiro, definimos$a
igual ao nosso número de entrada e a condicional é até que$a
seja menor que ou igual a 1. Esse loop encontrará os principais fatores.Fazemos um loop de
2
até$a
, usesWhere-Object
(|?{...}
) para obter primos que também são fatores!($a%$_)
. Eles são alimentados em um loop interno|%{...}
que coloca o fator$b
e se divide$a
(assim, finalmente chegaremos a1
).Então, agora temos todos os nossos principais fatores
$b
. Hora de formular nossa saída booleana. Precisamos verificar se$n
é-notin
$b
, porque se é que isso significa que$n
é primo, e por isso não é um número Smith. Além disso, (-and
) precisamos garantir que nossos dois conjuntos de somas de dígitos sejam-eq
comuns. O booleano resultante é deixado no pipeline e a saída é implícita.NB - Requer v3 ou mais recente para o
-notin
operador.Ainda estou executando a entrada paraApós mais de 3 horas, recebi um erro de stackoverflow. Então, há algum limite superior em algum lugar. Ah bem.4937775
(isso é lento para calcular), então atualizarei isso quando terminar.Isso funcionará para entrada negativa, zero ou uma, porque o lado direito da
-and
tela exibirá um erro enquanto tenta calcular as somas de dígitos (mostradas abaixo), o que fará com que essa metade seja$false
avaliada. Como STDERR é ignorado por padrão e a saída correta ainda é exibida, tudo bem.Casos de teste
fonte
MATL, 17 bytes
Emite truthy ou falsey matrizes em que uma saída truthy exige que todos os elementos sejam diferentes de zero.
Experimente online
fonte
Geléia ,
27 2523 bytes(ainda mais golfe
provavelmentedefinitivamente possível)Retorna
0
para Falso ou1
VerdadeiroTodos os casos de teste em TryItOnline
Quão?
fonte
Na verdade, 18 bytes
Infelizmente, na verdade não há uma fatoração embutida que dê os principais fatores de um número à multiplicidade, então tive que cortar um juntos. Sugestões de golfe são bem-vindas. Experimente online!
Ungolfing
fonte
Haskell,
120105 bytesfonte
Oitava,
8078 bytesExplicação:
Experimente online .
fonte
any(t<0)
para não-primality é muito inteligentePitão, 21 bytes
Um programa que recebe a entrada de um número inteiro e imprime
True
ouFalse
conforme relevante.Experimente online
Como funciona
fonte
Perl 6 ,
928887 bytesUma função anônima que retorna um Bool.
( experimente online )
EDIT: -1 byte graças a b2gills
fonte
2..i-1
é melhor escrito como2..^i
.Java 7,
509506435426419230 bytesEu deveria ter ouvido o comentário de @BasicallyAlanTuring ..
Ah, bem. Algumas linguagens de programação usam um único byte para os fatores primos ou para verificação principal, mas o Java certamente não é um deles.
Edição: metade da quantidade de bytes agora que eu tive algum tempo para pensar sobre isso.
Casos não testados (separação ..) e teste:
Experimente aqui.
Saída:
fonte
Brachylog (mais recente) , 11 bytes
Experimente online!
O predicado é bem-sucedido se a entrada for um número Smith e falhar se não for.
fonte
Japonês ,
1411 bytes-3 bytes graças a @Shaggy
Experimente online!
fonte
JavaScript (ES6),
87 8684 bytesExperimente online!
fonte
Pyke, 16 bytes
Experimente aqui!
fonte
2
Perl 6 , 80 bytes
Experimente online!
Bloco de código anônimo que pega um número inteiro e retorna um booleano.
fonte
APL (Dyalog Extended) ,
3629 bytes SBCSEssa resposta deve sua capacidade à
⍭
mônada do Extended por retornar os fatores primos de um número, e isso⊤
é melhor na conversão de base do que no Dyalog Unicode.Edit: -7 bytes graças ao dzaima.
Experimente online!
Explicação
fonte
{2>⍵:0⋄(⊃=+/-⊃×2<≢)+⌿10⊤⍵,⍭⍵}
J ,
3130 bytesExperimente online!
fonte
C (gcc) ,
139136 bytesExperimente online!
-3 bytes graças a ceilingcat
Explicação:
fonte
t-h&&i==_
vez det-h?i==_:0
Raquete 176 bytes
Retorna 1 se verdadeiro e 0 se falso:
Versão detalhada:
fonte
Ferrugem - 143 bytes
solução python emprestada por @levitatinglion ... pelo menos isso é mais curto que Java ...
degolfado em play.rust-lang.org
fonte
APL (NARS), 33 caracteres, 66 bytes
"π⍵" retorna os fatores da lista de ⍵, suponha que a entrada seja um número inteiro positivo> = 1; teste:
fonte
C (gcc), 177 bytes
Define uma função
Q
que retorna 0 para números smith e diferente de zero para números não smithExperimente online!
Explicação:
fonte
C # (compilador interativo do Visual C #) , 122 bytes
Experimente online!
fonte