Seja (Entrada)
Então os divisores são: 1, 2, 3, 6, 7, 14, 21, 42
Esquadrar cada divisor: 1, 4, 9, 36, 49, 196, 441, 1764
Tomando soma (adicionando): 2500
Como , retornamos um valor verdadeiro. Se não for um quadrado perfeito, retorne um valor falso.
Exemplos :
42 ---> true
1 ---> true
246 ---> true
10 ---> false
16 ---> false
Este é o código-golfe, pelo que o código mais curto em bytes para cada idioma ganha
Obrigado a @Arnauld por apontar a sequência: A046655
code-golf
math
number
decision-problem
Usuário Any3nymous
fonte
fonte
Respostas:
R ,
3937 bytesExperimente online!
Usa a abordagem clássica "teste se quadrado perfeito", obtendo a parte não integral da raiz quadrada
S^.5%%1
e a negação lógica dela, pois mapeia zero (quadrado perfeito) paraTRUE
e diferente de zero paraFALSE
.Agradecemos a Robert S por salvar alguns bytes!
fonte
scan()
para salvar alguns bytes?JavaScript (ES7),
46 4442 bytesGuardado 1 byte graças a @Hedi
Experimente online!
Comentado
fonte
d
indo den
que0
, em vez2
dan
assim:n=>!((g=d=>d?d*d*!(n%d)+g(d-1):0)(n)**.5%1)
05AB1E , 5 bytes
Experimente online!
Quão?
fonte
Linguagem de programação de Shakespeare ,
434428415 bytesExperimente online!
-13 bytes graças a Jo King!
Saídas
1
para resultado verdadeiro, saídas0
para resultado falso.fonte
Python 2 , 55 bytes
Experimente online!
fonte
Neim , 5 bytes
Explicação:
Experimente online!
fonte
C (gcc) ,
67636059 bytes-1 bytes graças a @JonathanFrech
Experimente online!
fonte
++i<=n
seri++<n
?Braquilog ,
128 bytes-4 bytes graças a Fatelize porque eu não percebi que o braquilog possui um fator de funções
explicação
Experimente online!
fonte
f^₂ᵐ
é 4 bytes menor queḋ{⊇×^₂}ᵘ
MathGolf ,
54 bytesExperimente online!
Explicação
Muito semelhante a outras respostas, em comparação com 05AB1E, ganho um byte para o meu operador "é quadrado perfeito".
fonte
MATL , 9 bytes
Experimente online!
Tão simples quanto possível
fonte
PowerShell ,
6856 bytesExperimente online!
Parece longo ...-12 bytes graças a mazzy
Faz exatamente o que diz na lata. Pega o intervalo de
1
entrada$n
e multiplica os$_*$_
tempos quadrados , seja um divisor ou não!($n%$_)
. Isso torna os divisores iguais a um número diferente de zero e os não-divisores iguais a zero. Em seguida, tomamos a soma deles com nosso acumulador$a
. Em seguida, fazemos um loop novamente de1
até$a
e retirar esses números, onde|?{...}
ele quadrado é-eq
ual a$a
. Isso é deixado no pipeline e a saída está implícita.Emite um número inteiro positivo para verdade e nada para falsey.
fonte
$args[0]
é mais curto :)1..$args[0]|%{$a+=$_*$_*!($n%$_)};1..$a|?{$_*$_-eq$a}
$n
dentro do loop!($n%$_)
. Mas, sua reescrita da soma economizou 12 bytes, então obrigado!$args[0]
é mais curto :)Japonês ,
1197 bytes-2 bytes de @Giuseppe e outro -2 de @Shaggy
Experimente online!
fonte
APL (Dyalog Unicode) , 18 bytes
Experimente online!
Lambda anônimo. Retorna 1 para verdade e 0 para falsidade (os casos de teste no TIO são prettificados).
Gritos para @ H.PWiz por 4 bytes!
Quão:
fonte
not
ao invés0=
de salvar um byte?not
operador da APL (~
), quando usado monadicamente, funciona apenas com booleanos (0 ou 1). Como qualquer número do módulo 1 nunca é igual a 1, se eu usasse em~
vez de0=
, obteria umdomain error
em qualquer número que não seja um quadrado perfeito, pois os valores decimais estão fora do~
domínio de. Além disso, não posso simplesmente omitir o0=
, já que o valor de verdade da APL é 1, e não 0, e não teria uma saída consistente para valores de falsidade.K (oK) ,
262522 bytesSolução:
Experimente online!
Explicação:
Notas:
fonte
Pari / GP , 23 bytes
Experimente online!
fonte
Matlab,
3937 bytesInfelizmente, ele não funciona no Octave (no tio), portanto não há link para o tio.
Nota Como o @LuisMendo afirmou,
divisors()
pertence à Symbolic Toolbox.fonte
divisors
pertencer à caixa de ferramentas simbólica. Você deve indicar isso no título. Além disso, você pode usar em~···
vez de···==0
sum(...)^.5
vez desqrt(sum(...))
Haskell ,
786453 bytes-14 bytes graças a Ørjan Johansen . -11 bytes graças a ovs .
Experimente online!
Ei, já faz um tempo desde que eu ... escrevi qualquer código, então meu Haskell e golfe podem ficar um pouco enferrujados. Esqueci os problemáticos tipos numéricos de Haskell. : P
fonte
Pyt , 7 bytes
Experimente online!
Explicação
Experimente online!
Explicação
Experimente online!
Explicação
fonte
Casca , 6 bytes
Experimente online!
Explicação
fonte
Gelatina , 6 bytes
Experimente online! Ou veja a suíte de testes .
Quão?
fonte
Próton , 41 bytes
Experimente online!
Abordagem semelhante à resposta do Python.
fonte
Mathematica, 32 bytes
Função pura. Pega um número como entrada e retorna
True
ouFalse
como saída. Não tenho certeza se existe um método mais curto para verificar quadrados perfeitos.fonte
Oitava / MATLAB, 43 bytes
Experimente online!
fonte
Vermelho , 67 bytes
Experimente online!
fonte
Scala ,
6867 bytesExperimente online!
fonte
Perl 6 , 34 bytes
-1 byte graças a nwellnhof
Experimente online!
fonte
**.5
é um byte menor que.sqrt
.F #, 111 bytes
Experimente online!
Portanto,
d
obtém os divisores para todos os números entre 1 en
inclusive. Na função principalu
, a primeira linha atribui a soma de todos os divisores ao quadradom
. A segunda linha obtém os divisores param
e determina se algum deles ao quadrado é igualm
.fonte
Perl 5, 47 bytes
Retorna 1 para true e nada para false.
Explicação:
fonte
Groovy , 47 bytes
Um lambda aceitando um argumento numérico.
Explicação
(1..n)
cria uma matriz dos valores de 1 a nn%i
é falso (como 0 é falso) sei
dividen
sem deixar reston%i ? 0 : i*i
é a soma do quadrado do valori
se ele dividirn
sem deixar resto, caso contrário, é 0sum{ i-> n%i ? 0 : i*i }
soma o resultado anterior em todoi
o array.s%Math.sqrt(s)
é falso (como 0 é falso) se o sqrt de ses
dividirs
sem deixar resto!(s%Math.sqrt(s))
retorna do lambda (return
implícito na última instrução)!false
quando o sqrt des
divides
sem restoExperimente online!
fonte
Java 8,
7570 bytes-5 bytes graças a @ archangel.mjj .
Experimente online.
Explicação:
fonte
n->{int s=0,i=0;for(;++i<=n;)s+=n%i<1?i*i:0;return Math.sqrt(s)%1==0;}