Fundo:
O desafio atual do Perfect Numbers é um tanto falho e complicado, pois solicita que você produza em um formato complexo que envolva os fatores do número. Este é um repost puramente do problema da decisão .
Desafio
Dado um número inteiro positivo através de qualquer formato de entrada padrão , faça uma distinção entre ser perfeito ou não.
Um número perfeito é um número que é igual à soma de todos os seus divisores adequados (seus divisores positivos menores que ele próprio). Por exemplo, é um número perfeito, pois seus divisores são , que somam , enquanto não é um número perfeito, pois seus divisores ( ) somam , não .
Casos de teste:
Imperfect:
1,12,13,18,20,1000,33550335
Perfect:
6,28,496,8128,33550336,8589869056
Regras
- Seu programa não precisa concluir os casos de teste maiores, se houver restrições de memória ou tempo, mas, teoricamente, deve ser possível se receber mais memória / tempo.
- A saída pode ter dois valores distintos e consistentes em qualquer formato de saída permitido . Se não for imediatamente óbvio o que representa Perfeito / Imperfeito, certifique-se de especificar em sua resposta.
code-golf
number
decision-problem
number-theory
factoring
Brincadeira
fonte
fonte
1
não seja perfeito seria, pois cada número é divisível por1
si próprio. A soma dos divisores adequados de1
é0
Respostas:
Braquilog , 4 bytes
Experimente online!
O predicado consegue entradas perfeitas e falha em entradas imperfeitas, impressão
true.
oufalse.
se for executado como um programa completo (exceto no último caso de teste que leva mais de um minuto no TIO).fonte
fk
: xNeim , 3 bytes
Experimente online!
(Na verdade, eu não sei como executar todos os casos de teste de uma só vez, desde que comecei a aprender Neim cerca de quinze minutos atrás, mas os verifiquei individualmente.)
Imprime 0 para imperfeito, 1 para perfeito.
fonte
𝔼
1 byte? Neim usa apenas 128 caracteres não padrão?R ,
3329 bytesExperimente online!
Retorna
TRUE
para números perfeitos eFALSE
para números imperfeitos.fonte
0
(perfeito) paraFALSE
e diferente de zero,TRUE
mas eu removi um deles para reverter o mapeamento. É um truque de golfe útil elenco denumeric
quelogical
, muitas vezes em conjunto comwhich
ou[
.Gelatina , 3 bytes
Experimente online!
fonte
Japonês
-!
, 4 bytesPor alguma razão,
¦
não funciona no tio, então eu preciso usar a-!
bandeira e, em¥
vez disso,Experimente online!
fonte
U
não é inserido automaticamente antes!
.Python 3 , 46 bytes
Experimente online!
Força bruta, soma os fatores e verifica a igualdade.
fonte
lambda x:sum(i for i in range(1,x)if x%i<1)^x
deve funcionar.Python , 45 bytes
True
para perfeito;False
para outras pessoas (alterne com==
->!=
)Experimente online!
44 4241 bytes (-2 graças a ovs) se pudermos produzir usando "truthy vs falsey":(falsey (
0
)) para perfeito; truthy (um número inteiro diferente de zero)fonte
Oitava , 25 bytes
Experimente online!
Explicação
fonte
JavaScript, 38 bytes
Experimente online!
(Último tempo limite da caixa de teste no TIO.)
fonte
f=
após a conversão de uma função recursiva.C # (compilador interativo do Visual C #) , 46 bytes
Retorna 0 se perfeito, caso contrário, retorna um número positivo. Eu não sei se a saída de diferentes tipos de números inteiros é permitida no lugar de dois valores distintos de verdade e falsidade, e não consegui encontrar nenhuma discussão sobre meta sobre isso. Se isso for inválido, eu o removerei.
Experimente online!
C # (compilador interativo do Visual C #) ,
4947 bytesExperimente online!
fonte
Ruby , 33 bytes
Experimente online!
fonte
TI-BASIC (TI-84),
3023 bytesHorrivelmente ineficiente, mas funciona.Reduzir o número de bytes acelerou muito o programa.
A entrada é no
Ans
.A saída está em
Ans
impressa e automaticamente impressa quando o programa é concluído.Explicação:
(O TI-BASIC não tem comentários, então assuma que
;
faz um comentário)Exemplo:
Nota: A contagem de bytes de um programa é avaliada usando o valor em [MEM] > [2] > [7] (36 bytes), subtraindo o comprimento do nome do programa
CDGF2
, (5 bytes) e 8 bytes extras usados para armazenando o programa:36-5-5 = 23 bytes
fonte
Java (JDK) , 54 bytes
Experimente online!
Embora para um número estrito por número correspondente, o seguinte retornará os mesmos valores, mas é de apenas 40 bytes.
Experimente online!
fonte
Your program doesn't have to complete the larger test cases, if there's memory or time constraints, but it should be theoretically able to if it were given more memory/time.
int
, mas sim umBigInteger
? Porque o Java possuiBigIntegers
, mas nunca teráint
mais do que 31 bits como assinado, o que não pode conter outro valor além daqueles representados aqui ...int
tipo não for ilimitadoMontagem x86,
4543 bytes.Explicação (Sintaxe da Intel):
A entrada deve ser fornecida em
EAX
.Conjuntos de funções
EAX
para1
para aperfeiçoar e0
para imperfeito.EDIT : Reduzido Byte-Count por dois, substituindo
MOV EAX, $1
porXOR EAX, EAX
eINC EAX
fonte
Labirinto , 80 bytes
Os caracteres latinos
perfect puts zero else neg I
são na verdade apenas comentários *.ou seja, se a entrada é perfeita, a
0
é impressa, caso contrário,-1
é.Experimente online!
* Então este ou este trabalho também ...
Quão?
Pega como entrada um número inteiro positivo
n
e coloca uma variável acumuladora-n
na pilha auxiliar e, em seguida, executa um teste de divisibilidade para cada número inteiro den-1
baixo para, e incluindo1
, adicionando qualquer um que seja divididon
no acumulador. Quando isso estiver concluído, se a variável do acumulador for diferente de zero, a-1
é emitida, caso contrário, a0
é.O
?::`}:(
é executado apenas uma vez, no início da execução:A próxima instrução,,
"
é no-op, mas temos três instruções vizinhas, portanto, ramificamos de acordo com o valor no topo de Main, zero nos leva adiante, enquanto diferente de zero nos leva à direita.Se a entrada foi
1
, seguimos em frente porque o topo de Main é zero:Mas se a entrada for maior do
1
que virar à direita, porque a parte superior de Main é diferente de zero:Neste ponto, temos um ramo de três vizinhos, mas sabemos que
n-1
é diferente de zero, por isso vimos à direita ...Agora estamos em outra filial de três vizinhos em
%
.Se o resultado de
%
for diferente de zero, vamos para a esquerda para diminuir nosso divisor em potencialp=p-1
e deixar o acumuladora
, como ele é:... mas se o resultado de
%
foi zero (para a primeira passagem somente quandon=2
), vamos direto para AMBOS, adicionamos o divisor ao nosso acumuladora=a+p
, E diminui nosso divisor em potencialp=p-1
:Neste ponto, se
p-1
ainda for diferente de zero, vire à esquerda:... mas se
p-1
acertar zero, vamos direto para a:
segunda linha do labirinto (você já viu todas as instruções antes, então deixo suas descrições de fora e apenas produzo seus efeitos):Agora isso
{
tem três instruções vizinhas, então ...... se
a
for zero, o que será perfeiton
, então vamos direto:... se
a
for diferente de zero, o que não será perfeiton
, viramos à esquerda:fonte
CJam , 17 bytes
Experimente online!
fonte
Javascript, 62
Explicação (embora seja bastante simples)
Obrigado a Jo King pela melhoria!
fonte
05AB1E , 4 bytes
Experimente online!
Explicação
fonte
Powershell,
46 bytes43 bytesExperimente Online!
Edit: -3 bytes graças a @AdmBorkBork
fonte
2*$i
para eliminar a subtração-um parens.C (gcc) , 41 bytes
Experimente online!
Deixe-me saber se essa falha no caso final é um problema.
fonte
n=!s;
vez dereturn!s;
salvar 5 bytes.s=s
que mais do que provavelmente foi otimizado.Smalltalk, 34 bytes
fonte
Quarto (gforth) , 45 bytes
Experimente online!
Explicação
Repete todos os números de 1 a n-1, somando todos os valores que dividem n perfeitamente. Retorna true se sum for n
Código Explicação
fonte
Pitão , 9
13bytesExperimente online!
Obrigado aos comentaristas pela ajuda do golfe
Localiza todos os fatores da entrada, soma-os e compara-os à entrada original.
fonte
q0
podem ser substituídos!
eSQ
produzem o alcance[1-Q]
, para que o alcance[1-Q)
possa ser gerado usandoStQ
. Como osQ
s estão agora no final do programa, ambos podem ser omitidos. Versão instável, 9 bytes -qsf!%QTSt
Lote, 81 bytes
Toma
n
como parâmetro da linha de comando e gera1
se for um número perfeito. Método de força bruta, inicia a soma em-n
para que ele possa se incluirn
no loop.fonte
Carvão vegetal , 13 bytes
Experimente online! Link é a versão detalhada do código. Saídas
-
para números perfeitos. Usa força bruta. Explicação:fonte
Wolfram Language (Mathematica) , 14 bytes
Experimente online!
fonte
Pitão, 8 bytes
Experimente online aqui .
fonte
Retina 0.8.2 , 44 bytes
Experimente online! Usa força bruta, portanto, o link inclui apenas os casos de teste mais rápidos. Explicação:
Converta para unário.
Combine todos os fatores da entrada. Isso usa o modo de sobreposição, que no Retina 0.8.2 exige que todas as correspondências sejam iniciadas em posições diferentes; portanto, as correspondências são realmente retornadas em ordem decrescente, começando com a entrada original.
Subtraia os fatores adequados da entrada.
Teste se o resultado é zero.
fonte
Java 8, 66 bytes
Alguém precisa usar a API de fluxo em algum momento, mesmo se houver uma maneira mais curta de fazer isso
Experimente online!
fonte
cQuents , 8 bytes
Experimente online!
Explicação
fonte