Числа з подібними потужностями


17

Враховуючи ціле p> 1 , знайдіть найменше ціле число q> p таким, що перелік експонентів у основній факторизації q є таким самим, як у p , незалежно від порядку чи значення простих факторів.

Приклади

Основна факторизація p = 20 дорівнює 2 2 x 5 1 . Найменше ціле число, що перевищує р з однаковими показниками, у його основній факторизації дорівнює q = 28 = 2 2 x 7 1 .

Основна факторизація p = 2500 - 2 2 x 5 4 . Найменше ціле число, що перевищує p з однаковими показниками, у його основній факторизації дорівнює q = 2704 = 2 4 x 13 2 .

Правила

  • Гарантоване введення буде цілим числом більше 1.
  • Це , тому найкоротша відповідь у байтах виграє.

Тестові справи

Input | Output
------+-------
2     | 3
20    | 28
103   | 107
256   | 6561
768   | 1280
2500  | 2704
4494  | 4510
46552 | 46584
75600 | 105840

2
Для довідки, це A081761 в OEIS.
Джонатан Фрех

Відповіді:



5

Математика, 61 байт

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

Спробуйте в Інтернеті!

-4 байти від @Misha Lavrov


Більш стислий спосіб написання такої Whileпетлі - це s=#;While[f@++s!=f@#];s.
Міша Лавров

1
Ви можете замінити f[x_]з , f@x_щоб зберегти байти.
numbermaniac

1
Або навіть пройти композиційно-салатовий шлях визначення f=Last/@#&@*FactorInteger/*Sort.
Міша Лавров

4

Pyth , 15 байт

fqFmShMrPd8,QTh

Спробуйте тут! або Перевірте всі тестові випадки.

Як це працює?

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.

Альтернативи

Ще 15 байт:

LShMrPb8fqyQyTh

І кілька (довших) альтернатив:

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


4

Брахілог , 13 байт

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

Спробуйте в Інтернеті!

Давно я не розмістив відповідь ...

Пояснення

<.               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

4

Пітон 2 , 176 179 171 170 169 байт

  • Додано три байти під час зміни запиту від набору показників до списку експонентів ; set(f)було змінено на sorted(f).
  • Збережено вісім байтів завдяки овам ; гольф блоку if / else до множення.
  • Збережено байт; гольф (n!=r)до (n>r).
  • Збережено байт; гольф while N>1до 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

Спробуйте в Інтернеті!


3

Haskell , 107 байт

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

Спробуйте в Інтернеті! Приклад використання: f 2500врожайність 2704.

Завдяки nimi за вказівку на недоліки та збереження купи байтів.


Без primeFactorsвбудованого (117 байт)

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

Спробуйте в Інтернеті!


2

Пітон - 141 байт

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

Здається, що ваша програма виводить неправильне значення для 2500введення; 4624замість 2704.
Джонатан Фрех

while n-1:може бути while~-n:.
Джонатан Фрех


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.