Números com poderes semelhantes

17

Dado um número inteiro p> 1 , encontre o menor número inteiro q> p, de modo que a lista de expoentes na fatoração primária de q seja igual à de p , independentemente da ordem ou do valor dos fatores primos.

Exemplos

A fatoração primária de p = 20 é 2 2 x 5 1 . O menor número inteiro maior que p com expoentes idênticos em sua fatoração primária é q = 28 = 2 2 x 7 1 .

A fatoração primária de p = 2500 é 2 2 x 5 4 . O menor número inteiro maior que p com expoentes idênticos em sua fatoração primária é q = 2704 = 2 4 x 13 2 .

Regras

  • A entrada é garantida como um número inteiro maior que 1.
  • Isso é , então a resposta mais curta em bytes vence.

Casos de teste

Input | Output
------+-------
2     | 3
20    | 28
103   | 107
256   | 6561
768   | 1280
2500  | 2704
4494  | 4510
46552 | 46584
75600 | 105840
Arnauld
fonte
2
Apenas para referência, este é o A081761 no OEIS.
Jonathan Frech

Respostas:

9

Casca , 10 bytes

§ḟ¤≡ȯÖLgp→

Experimente online!

Explicação

§ḟ       →     Find the first number starting from the input + 1 such that...
        p        The prime factorisation
       g         with equal elements grouped together
    ȯÖL          and sorted by length of groups
  ¤≡             has the same shape as the above applied to the input.
H.PWiz
fonte
5

Mathematica, 61 bytes

(f[x_]:=Sort[Last/@FactorInteger@x];s=#;While[f@++s!=f@#];s)&  

Experimente online!

-4 bytes de @Misha Lavrov

J42161217
fonte
Uma maneira mais concisa de escrever esse Whileloop é s=#;While[f@++s!=f@#];s.
Misha Lavrov
11
Você pode substituir f[x_]por f@x_para salvar um byte.
numbermaniac
11
Ou mesmo seguir a rota da composição-salada de definir f=Last/@#&@*FactorInteger/*Sort.
Misha Lavrov #
4

Pitão , 15 bytes

fqFmShMrPd8,QTh

Experimente aqui! ou Verifique todos os casos de teste.

Como é que isso funciona?

fqFmShMrPd8,QTh   ~ Full program. Q = first input.

f             h   ~ First input where the condition is truthy over [Q+1, Q+2, ...]
           ,QT    ~ The two element list [Q, current value (T)].
   m              ~ Map over ^ with d.
       Pd         ~ The prime factorization of d.
      r  8        ~ Run-Length encode ^.
    hM            ~ Get the first element of each.
 qF               ~ Check if the values are equal.
                  ~ Output implicitly.

Alternativas

Outro 15-byter:

LShMrPb8fqyQyTh

E algumas alternativas (mais longas):

fqFmSlM.gkPd,QTh
LSlM.gkPbfqyQyTh
LS/LPb{PbfqyQyTh
f!-FmlM.gkPd,QTh
Mr. Xcoder
fonte
4

Braquilog , 13 bytes

<.;?{ḋḅlᵐ}ᵐ=∧

Experimente online!

Faz muito tempo desde que eu postei uma resposta ...

Explicação

<.               Input < Output
 .;?             The list [Output, Input]
    {    }ᵐ      Map on [Output, Input]:
     ḋ             Prime decomposition
      ḅ            Group into sublists of consecutive equal elements
       lᵐ          Take the length of each sublist
           =∧    The result of the map must be the same for the Output and the Input
Fatalizar
fonte
4

Python 2 , 176 179 171 170 169 bytes

  • Foram adicionados três bytes à medida que a pergunta mudava do conjunto de expoentes para a lista de expoentes ; set(f)foi alterado para sorted(f).
  • Economizou oito bytes graças a ovs ; jogando o bloco if / else até a multiplicação.
  • Salva um byte; jogou golfe (n!=r)para(n>r).
  • Salva um byte; jogou golfe while N>1para while~-N.
N=input();n=-~N
def F(N):
 r,f=0,[]
 while~-N:
	for n in range(2,-~N):
	 if N%n<1:f+=[1]*(n>r);f[-1]+=n==r;r=n;N/=n;break
 return sorted(f)
while F(N)!=F(n):n+=1
print n

Experimente online!

Jonathan Frech
fonte
3

Haskell , 107 bytes

import Data.List
import Data.Numbers.Primes
p=sort.map(1<$).group.primeFactors
f x=until((==p x).p)(+1)$x+1

Experimente online! Exemplo de uso: f 2500rendimentos2704 .

Obrigado a nimi por apontar uma falha e salvar um monte de bytes.


Sem primeFactorsbuild-in (117 bytes)

import Data.List
1%n=[]
x%n|0<-mod x n=n:div x n%n|m<-n+1=x%m
p=sort.map(1<$).group.(%2)
f x=until((==p x).p)(+1)$x+1

Experimente online!

Laikoni
fonte
2

Python - 141 bytes

def s(n):
 i=1;d={}
 while n-1:
  i+=1
  if n%i<1:d[i]=d.get(i,0)+1;n/=i;i=1
 return d.values()
a=input()
j=a+1
while s(a)!=s(j):j+=1
print j
Maltysen
fonte
Seu programa parece gerar o valor errado para 2500como uma entrada; 4624em vez de 2704.
Jonathan Frech
while n-1:pode ser while~-n:.
Jonathan Frech
2

05AB1E , 15 bytes

XµN‚εÓ0K{}ËNI›&

Experimente online!

Explicação

Xµ                # Loop over N in [0 ...] until 1 match is found
  N‚              # pair N with input
    ε    }        # apply to each
     Ó            # list prime exponents
      0K          # remove zeroes
        {         # sort
          Ë       # check that they are equal
              &   # and
           NI›    # that N is greater than the input
Emigna
fonte
1

Python 3 + Sympy , 118 bytes

from sympy.ntheory import*
f=lambda k:sorted(factorint(k).values())
g=lambda i,k=2:i<k and f(k)==f(i)and k or g(i,k+1)

Experimente online!

Mr. Xcoder
fonte