Um número esfênico é um número que é o produto de exatamente três números primos distintos. Os primeiros números esfênicos são 30, 42, 66, 70, 78, 102, 105, 110, 114
. Esta é a sequência A007304 no OEIS.
Sua tarefa:
Escreva um programa ou função para determinar se um número inteiro inserido é um número esfênico.
Entrada:
Um número inteiro entre 0 e 10 ^ 9, que pode ou não ser um número esfênico.
Saída:
Um valor de verdade / falso indicando se a entrada é um número esfênico.
Exemplos:
30 -> true
121 -> false
231 -> true
154 -> true
4 -> false
402 -> true
79 -> false
0 -> false
60 -> false
64 -> false
8 -> false
210 -> false
Pontuação:
Este é o código-golfe , o código mais curto em bytes vence.
code-golf
number
decision-problem
primes
Gryphon - Restabelecer Monica
fonte
fonte
60
um número esfênico?2 × 2 × 3 × 5
60
não é um número esfênico. (aguardando esclarecimentos do OP)Respostas:
Braquilog ,
63 bytesExperimente online!
Explicação
fonte
≠
.Ṫ
também.Ṫ
não é realmente um predicado interno ; é uma variável interna: uma lista de 3 elementos variáveis. É uma variável pré-restrita bastante útil em muitos desafios diferentes.bash, 43 bytes
Experimente online!
Entrada via argumento de linha de comando, saídas
0
ou1
para stdout.Bastante auto-explicativo; analisa a saída de
factor
para verificar se o primeiro e o segundo fatores são diferentes, o segundo e o terceiro são diferentes (eles estão na ordem de classificação, portanto, isso é suficiente) e existem quatro campos (o número de entrada e os três fatores).fonte
MATL , 7 bytes
Experimente online! Ou verifique todos os casos de teste .
Explicação
fonte
X=
é o edifício mais triste que eu já vi.C,
8878126587773 + 4 (lm
) = 77 bytesUngolfed comentou explicação:
Experimente online!
fonte
i*1.0/l
vez do elenco, flutuar. (E uma vez quel
,j
são globais eles são inicializados a 0 para livre, você não precisa fazer isso se a função só é chamado uma vez Não sei o que a regra é para isso..)CJam , 11 bytes
Experimente online! Ou verifique todos os casos de teste .
Explicação
Com base na minha resposta MATL.
fonte
Gelatina , 8 bytes
Experimente online!
Usa o algoritmo de Luis Mendo.
Explicação:
fonte
Casca , 6 bytes
Experimente online!
Retorna 1 para números esfênicos e 0 caso contrário.
Explicação
Na última passagem, congruência entre duas listas significa ter o mesmo comprimento e a mesma distribuição de valores de verdade / falsidade. Nesse caso, estamos verificando se nosso resultado é composto por dois valores verdadeiros (ou seja, diferentes de zero).
fonte
Mathematica, 31 bytes
fonte
PrimeNu
fará o mesmoPrimeOmega
e é mais curto.Gelatina , 6 bytes
Experimente online!
Como funciona
fonte
05AB1E ,
75 bytesExperimente online!
Usa o algoritmo de Dennis.
fonte
Na verdade , 7 bytes
Experimente online!
Explicação:
fonte
Haskell , 59 bytes
Experimente online!
fonte
J , 15 bytes
Experimente online!
Explicação
fonte
Dyalog APL, 26 bytes
Experimente online!
fonte
Ruby,
814946 bytesInclui 6 bytes para opções de linha de comando
-rprime
.Experimente online!
fonte
Python 3 ,
5453 bytesGraças a @xnor por jogar fora um byte!
Experimente online!
fonte
k*k%n
vez den%k**2
C,
91102 bytes, corrigidos (novamente), jogados e testados em tempo real:/ * Isso também funciona em 93 bytes, mas como eu esqueci as regras padrão que restringem o tipo int padrão em variáveis dinâmicas e sobre o fato de não permitir valores implícitos de retorno sem atribuições, não vou aceitar:
(Quem disse que eu sabia alguma coisa sobre C? ;-)
Aqui está o quadro de teste com o script shell nos comentários:
Peguei emprestada a resposta anterior da betseg para chegar à minha versão.
Esta é a minha versão do algoritmo da betseg, que joguei para chegar à minha solução:
fonte
[betseg's answer](https://codegolf.stackexchange.com/a/135203/65836)
. Você também pode clicar em editar na resposta dele para sugerir uma edição, se desejar, que incluiria a explicação - não há promessas de que a aprovação seja ou não aprovada.Pitão, 9 bytes
Experimente aqui.
fonte
Javascript (ES6), 87 bytes
Exemplo de trecho de código:
fonte
Python 2 ,
135121 bytesExperimente online!
fonte
Python 2 , 59 bytes
Experimente online!
fonte
J, 23 bytes
Experimente online!
Manipular 8 e 0 basicamente arruinou este ...
q:
fornece todos os fatores primos, mas não lida com 0. o resto diz apenas "os fatores únicos devem ser iguais aos fatores" e "o número deles deve ser 3"fonte
60
8
.(6=]#@,~.)@q:
como uma solução possívelJaponês , 14 bytes
Experimente online!
fonte
Number.k()
, que não teria efeito e apenas verificaria se a entrada possui 3 fatores primos, não 3 fatores primos distintos . Isso significaria8
(com três fatores principais :)2, 2, 2
que passaria apesar de não estar no A0073048
aos casos de teste por esse motivo.Mathematica, 44 bytes
Experimente online!
fonte
VB.NET (.NET 4.5), 104 bytes
Estou usando o recurso de VB, onde o nome da função também é uma variável. No final da execução, como não há declaração de retorno, ela passará o valor da 'função'.
O último
A=A=3
pode ser pensadoreturn (A == 3)
em idiomas baseados em C.Começa com 2 e puxa os primários iterativamente. Como estou começando com os primos menores, ele não pode ser dividido por um número composto.
Tentará uma segunda vez dividir pelo mesmo primo. Se estiver (por exemplo, como 60 é dividido duas vezes por 2), ele definirá a contagem de números primos para 4 (acima do máximo permitido para um número esfênico).
Experimente Online!
fonte
Dyalog APL,
514948464543 bytesExperimente online! (modificado para ser executado no TryAPL)
Eu queria enviar um que não confie no namespace dfns, mesmo que seja longo .
fonte
J,
151419 bytesTentativa anterior:
3&(=#@~.@q:)~*
Versão Atual:
(*/*3=#)@~:@q: ::0:
Como funciona:
Isso passa para os casos 0, 8 e 60 que a versão anterior não.
fonte
Mathematica,
6657 bytesDefine uma função anônima.
é Transpor .Explicação
FactorInteger
fornece uma lista de pares de fatores e seus expoentes. Por exemploFactorInteger[2250]=={{2,1},{3,2},{5,3}}
. Isso é transposto para facilitar o uso e alimentado à funçãoLength@#1==3&&And@@EqualTo[1]/@#2&
. A primeira parte,Length@#1==3
verifica se há três fatores únicos, enquanto a segundaAnd@@EqualTo[1]/@#2
verifica se todos os expoentes são 1.fonte
PHP, 66 bytes:
Execute como pipe
-nR
ou experimente on-line .Loop infinito para
0
; insira$n&&
antes--$n
de corrigir.demolir
exemplo
argumento =
30
:factores primos são
2
,3
e5
outros divisores são
1
, 2 * 3 =6
, 2 * 5 =10
e 3 * 5 =15
seu produto:
1*2*3*5*6*10*15
é27000
==30**3
fonte
Python 99 bytes
Primeira submissão. Perdoe-me se fiz algo errado. Meio bobo, conta o número de fatores de
n
e, em seguida, o número de vezesn
é divisível por cada um (adicionando 10 ** 9).Tenho certeza de que existem algumas maneiras fáceis de cortar ~ 10 a 20 caracteres, mas não o fiz.
Além disso, isso é intratàvelmente lento em 10 ** 9. Poderia ser resolvido alterando
'...a+=1\n'*n
para'...a+=1\n'*n**.5
, pois só precisamos ir para a raiz quadrada den
.fonte