Dado um número inteiro positivo n , calcule o valor da função Mertens M ( n ) em que
e μ ( k ) é a função de Möbius em que μ ( k ) = 1 se k tiver um número par de fatores primos distintos, -1 se k tiver um número ímpar de fatores primos distintos e 0 se os fatores primos não forem distintos.
- Como código é golfe , crie o código mais curto para uma função ou programa que calcule a função Mertens para um número inteiro de entrada n > 0.
- Esta é a sequência OEIS A002321 .
Casos de teste
n M(n)
1 1
2 0
3 -1
4 -1
5 -2
6 -1
7 -2
8 -2
9 -2
10 -1
117 -5
5525 5
7044 -25
8888 4
10000 -23
Respostas:
Gelatina , 6 bytes
Experimente online! ou verifique os casos de teste menores . (leva um tempo)
fundo
Isso usa a propriedade
do A002321 , que leva à seguinte fórmula recursiva.
Como funciona
fonte
Mathematica,
2220 bytesObrigado a @miles por salvar 2 bytes.
Explicação
Gere uma lista de 1 para entrada.
Localização
MoebiusMu
de cada númeroSoma o resultado.
fonte
Python 2,
4537 bytesTeste em Ideone .
fundo
Isso usa a propriedade
do A002321 , que leva à seguinte fórmula recursiva.
Como funciona
Usamos a recursão não apenas para calcular M para os quocientes, mas também para calcular a soma dessas imagens. Isso economiza 8 bytes na implementação simples a seguir.
Quando f é chamado com um único argumento n , o argumento opcional k assume como padrão 2 .
Se n = 1 ,
n<k
produz True e f retorna esse valor. Este é o nosso caso base.Se n> 1 ,
n<k
retorna inicialmente False e o código a seguiror
é executado.f(n/k)
recursivamente calcula um termo da soma, que é subtraído do valor de retorno def(n,k+1)
. O último incrementa k e recursivamente chama f , iterando sobre os possíveis valores de k . Uma vez que n <k + 1 ou n = 1 ,f(n,k+1)
retornará 1 , encerrando a recursão.fonte
05AB1E ,
1615 bytesExplicação
Experimente online!
fonte
Braquilog ,
2220 bytesExperimente online!
Explicação
fonte
Geléia , 9 bytes
Experimente online! ou verifique todos os casos de teste .
Como funciona
fonte
Haskell,
2927 bytesfonte
Geléia , 7 bytes
Não é muito eficiente; determinantes são difíceis.
Experimente online! ou verifique os casos de teste menores . (leva um tempo)
fundo
Isso usa uma fórmula de A002321 :
M (n) é o determinante da matriz booleana A n × n , onde a i, j é 1 se j = 1 ou i | j e 0 caso contrário.
Como funciona
fonte
PHP, 113 bytes
Até onde eu sei, o php carece de algo como a funcionalidade de números primos, então isso é meio difícil. Provavelmente é possível fazer melhor.
use como:
fonte
Raquete 103 bytes
Ungolfed:
fonte
CJam (20 bytes)
Demonstração online
Usa a fórmula do OEIS
e o operador de memorização de CJam
j
.Dissecação
fonte
JavaScript (ES6), 50 bytes
Porto da resposta em Python do @ Dennis.
fonte
Julia,
2625 bytesExperimente online!
fundo
Isso usa a propriedade
do A002321 , que leva à seguinte fórmula recursiva.
Como funciona
Redefinimos o operador unário ! para nossos propósitos.
n÷(2:n)
calcula todos os quocientes necessários, nosso redefinido ! é mapeado sobre eles e, finalmente, a soma de todas as chamadas recursivas é subtraída de 1 .Infelizmente,
não funciona, pois a soma diádica será bloqueada em uma coleção vazia.
corrige isso, mas não salva bytes e retorna True para a entrada 1 .
fonte
C,
51 5047 bytesEdit: Obrigado a @Dennis por -3 bytes!
fonte
Scala, 53 bytes
Um porto da resposta piton de Dennis.
Eu chamei o método
?
, que é um token que não se apega às letras.fonte
Pitão, 12 bytes
Define uma função
y
que recebe on
.Conjunto de teste aqui. (Observe que o final
y
aqui é realmente chamar a função declarada.)fonte
Na verdade,
181716 bytesSugestões de golfe são bem-vindas. Experimente online!
Ungolfing
fonte
PARI / GP, 24 bytes
fonte
J, 19 bytes
Calcula a função Mertens
n
usando a soma da função Möbius no intervalo[1, n]
.Uso
Explicação
fonte