Znajdź n-ty numer Aarona

14

tło

Ruth-Aaron para jest parą kolejnych całkowitymi dodatnimi ni n+1takich, że suma z głównych czynników (czynniki pierwsze liczenie powtórzono) każdej liczby całkowitej są równe. Na przykład, (714,715)jest parę Ruth-Aaron, ponieważ 714=2*3*7*17, 715=5*11*13i 2+3+7+17=5+11+13=29. Nazwę pary Ruth-Aaron wybrał Carl Pomerance w odniesieniu do całkowitej kariery domowej Babe Ruth714 , która była rekordem świata od 25 maja 1935 r. Do 8 kwietnia 1974 r., Kiedy Hank Aaron rozpoczął swój 715domowy bieg. Możesz dowiedzieć się więcej o fascynującej historii tych liczb w tym filmie Numberphile .

Cel

Napisz pełny program lub funkcję, która przy dodatniej liczbie całkowitej nwyprowadza nth liczbę Aarona, gdzie nth liczba jest zdefiniowana jako większa liczba całkowita z npary Ruth-Aaron. Zatem nth liczba Aarona jest a(n)+1, gdzie a(n)jest nth termin w sekwencji OEIS A039752 .

Przypadki testowe

Pierwsze kilka liczb Aarona to

6,9,16,78,126,715,949,1331,1521,1863,2492,3249,4186,4192,5406,5561,5960,6868,8281,8464,10648,12352,14588,16933,17081,18491,20451,24896,26643,26650,28449,28810,33020,37829,37882,41262,42625,43216

Zasady

ngenisis
źródło
Oczywiście, „liczenie krotności” oznacza, że ​​20 -> 2, 2, 5, a nie 2, 5 prawda?
HyperNeutrino,
@Okx Byłem, właśnie zauważyłem, że kiedy odświeżyłem jego profil na Youtube, miał dokładnie 1 subskrybenta (nie mnie)
Mr. Xcoder
@HyperNeutrino Tak. Przeredaguję, aby wyjaśnić.
ngenisis,
Czy możemy wybrać indeksowanie od 0 do 1?
Pan Xcoder,
3
Ja też obejrzałem dzisiejszy film z
Numberphile

Odpowiedzi:

7

05AB1E , 11 10 9 bajtów

-1 bajt dzięki Emignie
-1 bajt dzięki Adnan

µN>Ð<‚ÒOË

Wyjaśnienie:

µ            While the counter variable (which starts at 0) is not equal to the input:
 N>          Store the current iteration index + 1, and then create an array with
   Ð<‚       [current iteration index + 1, current iteration index]
      ÒO     Get the sum of the prime factors of each element
        Ë    If all elements in the array are equal,
             implicitly increment the counter variable

1-indeksowany.

Wypróbuj online!

Okx
źródło
1
Wyjaśnienie, kiedy możesz, proszę :)
Mr. Xcoder,
@ Mr.Xcoder Dodano.
Okx,
10 bajtów:µN>Ð<‚ÒO˽
Emigna,
@Emigna Ah, miło.
Okx,
2
@Adhnan Naprawdę? To szalona funkcja językowa.
Okx,
5

Łuska , 11 9 bajtów

-2 bajty dzięki sprytnemu golfowi autorstwa @Leo

€∫Ẋ¤=oΣpN

Wypróbuj online!

Wyjaśnienie

  Ẋ     N   -- map function over all consecutive pairs ... of natural numbers           [(1,2),(2,3),(3,4),(4,5)...]
   ¤=       --   are the results of the following function equal for both in the pair?
     oΣp    --     sum of prime factors                                                   [0,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0]
 ∫          -- cumulative sum                                                           [0,0,0,0,0,1,1,1,2,2,2,2,2,2,2,3,3,3,3,3]                
€           -- the index of the first value equal to the input
H.PWiz
źródło
1
Dobra robota, miałem zamieścić zasadniczo ten sam pomysł :)
Leo
1
@Leo Ooh, €∫to naprawdę fajna sztuczka! I taki, który działa tylko w leniwym języku. ;)
Zgarb,
@Leo Bardzo sprytny.
H.PWiz,
3

Pyth , 23 20 bajtów

Jest to indeks 1.

WhQ=-QqsPZsPhZ=+Z1;Z

Test Suite lub Wypróbuj online!


Wyjaśnienie

WhQ = -QqsPZsPhZ = + Z1; Z - Pełny program. Pobiera dane wejściowe ze standardowego wejścia.

WhQ - Podczas gdy Q jest nadal wyższy niż 0.
       sPZ - Suma głównych czynników Z.
          sPhZ - Suma czynników pierwszych Z + 1.
      q - Jeśli powyższe są równe:
   = -Q - Zmniejszenie Q o 1, jeśli są równe, i o 0, jeśli nie są.
              = + Z1; - Przyrost Z na każdej iteracji.
                   Z - Wyjście Z. 
Pan Xcoder
źródło
3

Galaretka , 12 bajtów

;‘ÆfS€Eµ⁸#Ṫ‘

Łącze monadyczne przyjmujące i zwracające liczby nieujemne

Wypróbuj online!

W jaki sposób?

;‘ÆfS€Eµ⁸#Ṫ‘ - Link: number, n
         #   - n-find (counting up, say with i, from implicit 1)
        ⁸    - ...number of matches to find: chain's left argument, n
       µ     - ...action: the monadic chain with argument i:
 ‘           -   increment = i+1
;            -   concatenate = [i,i+1]
  Æf         -   prime factors (with duplicates, vectorises)
    S€       -   sum €ach
      E      -   all (two of them) equal?
          Ṫ  - tail, the last matching (hence nth) i
           ‘ - increment (need to return i+1)
Jonathan Allan
źródło
Zapisz bajt za pomocą ;’ÆfS€E_Ịµ#.
Erik the Outgolfer,
Nadal potrzebuję ogona.
Jonathan Allan,
1
I to właśnie dostajesz za testowanie 1.
Erik the Outgolfer,
3

PHP, 93 92 91 + 1 bajty

while(2+$argn-=$a==$b)for($b=$a,$a=!$x=$n+=$k=1;$k++<$x;)for(;$x%$k<1;$x/=$k)$a+=$k;echo$n;

Uruchom jako potok z -nR lub spróbuj online .

-2 bajty z 3 indeksami (pierwsza liczba Aarona jako argument 3 ): usuń 2+.

awaria

while(2+$argn       # loop until argument reaches -2 (0 and 1 are false positives)
    -=$a==$b)           # 0. if factors sum equals previous, decrement argument
    for($b=$a,          # 1. remember factors sum
        $a=!            # 3. reset factors sum $a
        $x=$n+=         # 2. pre-increment $n and copy to $x
        $k=1;$k++<$x;)  # 4. loop $k from 2 to $x
        for(;$x%$k<1;       # while $k divides $x
            $x/=$k)             # 2. and divide $x by $k
            $a+=$k;             # 1. add $k to factors sum
echo$n;             # print Aaron number $n
Tytus
źródło
3

MATL , 17 bajtów

`@:"@Yfs]vd~sG<}@

Na podstawie 1. Bardzo wolno.

Wypróbuj online!

Wyjaśnienie

`        % Do...while
  @      %   Push iteration index k, starting at 1
  :      %   Range [1 2 ... k]
  "      %   For each j in [1 2 ... k]
    @    %     Push j
    Yf   %     Row vector of prime factors
    s    %     Sum
  ]      %   End
  v      %   Concatenate whole stack into a column vector
  d      %   Consecutive differences. A zero indicates a Ruth-Aaron pair
  ~s     %   Number of zeros
  G<     %   Is it less than the input? If so: next k. Else: exit loop
}        % Finally (execute right before when the loop is exited)
  @      %   Push current k
         % Implicit end. Implicit display
Luis Mendo
źródło
3

Mathematica, 97 bajtów

(t=r=1;While[t<=#,If[SameQ@@(Plus@@((#&@@# #[[2]])&/@FactorInteger@#)&/@{#,#+1}&@r),t++];r++];r)&


Wypróbuj online!

J42161217
źródło
Musi wyprowadzić większą z pary zgodnie z opisem; 6zwraca 714zamiast 715, na przykład.
numbermaniac
1
@numbermaniac naprawiono! zapisane 2 bajty!
J42161217,
2

Pyth, 12 11 bajtów

e.fqsPtZsPZ

Indeksowanie z 1 usuwa bajt i stawia Pytha przed galaretką


Wyjaśnienie

e.fqsPtZsPZ - Pełny program. Pobiera dane wejściowe ze standardowego wejścia.

ef - Ostatni element listy pierwszych $ liczb wejściowych, dla których
   q - są równe 
    ss - Suma
     PtZ PZ - Czynniki pierwsze w liczbie $ 1 i liczbie $

Dave
źródło
1

Galaretka , 17 bajtów

ÆfS=’ÆfS$$µ³‘¤#ṖṪ

Wypróbuj online!

Wyjaśnienie

ÆfS=’ÆfS$$µ³‘¤#ṖṪ  Main link, argument is z
              #    Find the first       elements that satisfy condition y: <y><z>#
           ³‘¤                    z + 1
          µ        Monadic link, where the condition is:
  S                The sum of
Æf                            the array of primes that multiply to the number
   =               equals
       S           The sum of
     Æf                       the prime factors of
    ’                                              the number before it
        $$         Last two links as a monad, twice
               Ṗ   k -> k[:-1]
                Ṫ  Last element (combined with `pop`, gets the second last element)

1-indeksowany

HyperNeutrino
źródło
1
Nie jestem pewien, czy indeksowanie 2 jest dozwolone domyślnie.
Pan Xcoder,
@ Mr.Xcoder Pewnie, naprawione.
HyperNeutrino,
1

Rubin , 89 86 bajtów

->n{(1..1/s=0.0).find{|x|r,c=2,0
0while x%r<1?(x/=r;c+=r):x>=r+=1
(c==s)?0>n-=1:!s=c}}

Wypróbuj online!

GB
źródło
0

Python 2 , 119 104 102 101 bajtów

f=lambda n,k=2:n/k and(f(n,k+1),k+f(n/k))[n%k<1]
i=input();g=0
while-~i:i-=f(g)==f(g+1);g+=1
print(g)

Wypróbuj online!

-17 bajtów dzięki @ovs!

-1 bajt dzięki @notjagan

Podziękowania dla Dennisa za główny algorytm faktoryzacji. 1-indeksowany.


Uwaga: Jest to bardzo wolne i nieefektywne. Wejścia wyższe niż 7 ulegną awarii, chyba że ustawisz import sysi zrobisz sys.setrecursionlimit(100000), ale działa to teoretycznie.

Pan Xcoder
źródło
104 bajty , wykonując ffunkcję obliczającą sumę czynników pierwszych
ow
Byłoby świetnie, gdybyś śledził swoje bytecount (i może komentował twoje zmiany).
Tytus
(f(n,k+1),k+f(n/k))[n%k<1]dla kolejnych -2 bajtów. To sprawia, że ​​jest jeszcze wolniejszy.
ovs
-1 bajt po przełączeniu i+1na -~i.
notjagan