Liczby x takie, że x ^ 2 dzieli 7 ^ x-1

16

Zadanie

Istnieje zestaw liczb x, które x^2dzielą 7^x-1.

Twoim zadaniem jest znalezienie tych liczb. Biorąc pod uwagę wartość n, kod wypisze n-tą liczbę, która jest zgodna z tą regułą.

Przykłady 1-indeks

In   Out
3    3
9    24
31   1140

Odpowiednią sekwencję można znaleźć tutaj .

Zasady

Najkrótsza odpowiedź będzie zwycięzcą *

Obowiązują standardowe zasady gry w golfa

Luki są niedozwolone

Twoja odpowiedź może być zindeksowana 0 lub 1, proszę podać w swojej odpowiedzi

Jerzy
źródło
@nimi zapisałem je podczas planowania i nigdy ich nie wdrożyłem. Zaktualizowałem pytanie
George
Jakie są granice n? Mogę podać prawidłowy wynik n=9, ale n=10już powoduje mi problemy.
briantist
@ briantist Jeśli otrzymujesz zły wynik dla wyższych wartości wejściowych, twoja odpowiedź jest błędna. Jeśli zajmuje to dużo czasu, może to zależeć od implementacji.
mbomb007,
To nie zajmuje dużo czasu. n=10daje mi 32; to dlatego, że zaczyna używać podwójnego zamiast liczb całkowitych, a potem mod jest zły. :(
briantist

Odpowiedzi:

8

Haskell, 34 bajty

([x|x<-[1..],mod(7^x-1)(x^2)<1]!!)

Korzysta z indeksowania opartego na 0. Przykład użycia: ([x|x<-[1..],mod(7^x-1)(x^2)<1]!!) 30-> 1140.

Jest to bezpośrednie wdrożenie definicji. Tworzy listę wszystkich liczb xi wybiera nth.

nimi
źródło
5

Pyth , 10 bajtów

e.f!%t^7Z*

Program, który pobiera liczbę całkowitą i wypisuje wartość z jednym indeksem.

Wypróbuj online!

Jak to działa

e.f!%t^7Z*     Program. Input: Q
e.f!%t^7Z*ZZQ  Implicit variable fill
               Implicitly print
e              the last
 .f         Q  of the first Q positive integers Z
     t^7Z      for which 7^Z - 1
    %          mod
         *ZZ   Z^2
   !           is zero
TheBikingViking
źródło
5

JavaScript (ES7), 40 bajtów

f=(n,i=1)=>n?f(n-!((7**++i-1)%i**2),i):i

To traci precyzję dość szybko ze względu na fakt, że JS traci precyzję 7**19. Oto wersja ES6 o niemal dowolnej precyzji:

f=(n,i=0)=>n?f(n-!(~-(s=++i*i,g=j=>j?g(j-1)*7%s:1)(i)%s),i):i

To kończy się w ciągu około sekundy dla przypadku testowego 31.

Kilka dłuższych podejść:

f=(n,i=0)=>n?f(n-!(~-(s=>g=j=>j?g(j-1)*7%s:1)(++i*i)(i)%s),i):i
f=(n,i=0)=>n?f(n-!(s=++i*i,g=(j,n=1)=>j?g(j-1,n*7%s):~-n%s)(i),i):i
f=(n,i=0)=>n?f(n-!(s=>g=(j,n=1)=>j?g(j-1,n*7%s):~-n%s)(++i*i)(i),i):i
ETHprodukcje
źródło
4

05AB1E , 11 bajtów

µ7Nm<NnÖiN¼

Wypróbuj online!

Z jakiegoś powodu nie mogę dostać się ½do pracy µ7Nm<NnÖ½Nlub byłbym związany z Pyth.

µ           # Loop until the counter equals n.
 7Nm<       # Calc 7^x+1.
     Nn     # Calc x^2.
       Ö    # Check divisibility.
        iN¼ # If divisible, push current x and increment counter.
            # Implicit loop end.
            # Implicitly return top of stack (x)

.

Urna Magicznej Ośmiornicy
źródło
Tak, miałem dziwactwo Öna mojej liście poprawek od miesięcy, ale nigdy nie udało mi się sobie z tym poradzić. W każdym razie nie potrzebujesz, Nponieważ µautomatycznie wypisuje ostatnie, Njeśli stos jest pusty.
Emigna
4

Python 2 , 48 46 bajtów

Dzięki @Dennis za -2 bajty!

f=lambda n,i=1:n and-~f(n-(~-7**i%i**2<1),i+1)

Funkcja rekursywna o jednym indeksie, która pobiera dane wejściowe za pomocą argumentu i zwraca wynik.

Wypróbuj online! (Zwiększono limit rekurencji, aby umożliwić uruchomienie ostatniego przypadku testowego)

Jak to działa

njest pożądanym indeksem i ijest zmienną zliczającą.

Wyrażenie ~-7**i%i**2<1zwraca True(równoważne 1), jeśli i^2dzieli 7^i - 1, i False(równoważne 0) w przeciwnym razie. Za każdym razem, gdy wywoływana jest funkcja, wynik wyrażenia jest odejmowany n, zmniejszając się przy nkażdym znalezieniu trafienia; ijest również zwiększany.

Zachowanie zwarciowe andoznacza, że ​​gdy njest 0, 0jest zwracane; to jest przypadek podstawowy. Po osiągnięciu tego rekurencja zostaje zatrzymana, a bieżąca wartość ijest zwracana przez oryginalne wywołanie funkcji. Zamiast jawnie używać i, odbywa się to na podstawie faktu, że dla każdego wywołania funkcji wykonano inkrement przy użyciu -~przed wywołaniem; 0 iczasy inkrementacji dają i, zgodnie z wymaganiami.

TheBikingViking
źródło
1
(~-7**i%i**2<1)oszczędza kilka bajtów.
Dennis,
@Dennis Oczywiście! Dzięki.
TheBikingViking
3

Python 2 , 57 53 51 bajtów

-4 bajty dzięki ETHproductions
-2 bajty dzięki TuukkaX

i=0
g=input()
while g:i+=1;g-=~-7**i%i**2<1
print i

Wypróbuj online!
sekwencja jest indeksowana 1

Pręt
źródło
@ETHproductions yep c:
Rod
Czy testowanie nie powiedzie się, jeśli usuniesz nawiasy (7**i)? Usunąłem je i zadziałało w przypadku tych, których próbowałem.
Yytsi
@TuukkaX rzeczywiście **ma wyższy priorytet niż ~i-
Rod
2

Python 2, 57 bajtów

W przypadku dużych wartości zajmuje to naprawdę bardzo dużo czasu. Zużywa również dużo pamięci, ponieważ buduje całą listę dalej niż to konieczne. Wynik jest indeksowany zerem.

lambda n:[x for x in range(1,2**n+1)if(7**x-1)%x**2<1][n]

Wypróbuj online

mbomb007
źródło
z ciekawości, czy jest jakiś dowód na 2**n+1górną granicę?
Rod
@Rod Nie wiem, ale biorąc pod uwagę, że istnieje 50 wartości <5000, jestem pewien, że jest ich znacznie więcej niż 50 < 2**50. Mógłbym użyć 9**n+9, ale zajmuje to znacznie więcej czasu. Zacząłem biegać f(20)jakiś czas temu (z 2**n+1); wciąż nie zostało ukończone.
mbomb007
Nie sądzę nawet, aby istniał dowód na to, że sekwencja jest nieskończona, nie mówiąc już o ładnej górnej granicy dla n-tego terminu!
Greg Martin
2

Mathematica, 43 bajty

W tej liczbie bajtów mam obecnie trzy różne rozwiązania:

Nest[#+1//.x_/;!(x^2∣(7^x-1)):>x+1&,0,#]&
Nest[#+1//.x_/;Mod[7^x-1,x^2]>0:>x+1&,0,#]&
Nest[#+1//.x_:>x+Sign@Mod[7^x-1,x^2]&,0,#]&
Martin Ender
źródło
Jaki jest znak między x ^ 2 a (7 ^ x ... w pierwszym wierszu? Wygląda jak fajka, ale krótsza
Sefa
@Sefa Jest to znak Unicode dla matematycznego symbolu „dzieli” i jest używany przez Mathematica jako operator Divisible.
Martin Ender
Oto jeden z 41 bajtów: Cases[Range[#^3],x_/;x^2∣(7^x-1)][[#]]&oparty na heurystycznym argumencie, że n ^ 3 jest górną granicą. Odkryłem naprawdę cudowny dowód na to, że ten margines jest zbyt wąski, aby go pomieścić :)
Kelly Lowder
2

PARI / GP , 42 bajty

Całkiem proste. Indeksowane 1, choć można to łatwo zmienić.

n->=k=1;while(n--,while((7^k++-1)%k^2,));k

lub

n->=k=1;for(i=2,n,while((7^k++-1)%k^2,));k
Charles
źródło
1

Python 3 , 45 bajtów

f=lambda n,k=2:n<2or-~f(n-(7**k%k**2==1),k+1)

Zwraca wartość True dla danych wejściowych 1 , co jest domyślnie dozwolone .

Wypróbuj online!

Dennis
źródło
Nie mogę tego obecnie przetestować, ale zakładam, że zwraca wartość dla innych danych wejściowych? Zamiast bool?
George
1

R, 35 bajtów

To działa tylko dla n<=8.

z=1:20;which(!(7^z-1)%%z^2)[scan()]

Oto jednak dłuższa wersja, która działa n<=25dla 50 bajtów :

z=1:1e6;which(gmp::as.bigz(7^z-1)%%z^2==0)[scan()]
rturnbull
źródło
Czy to działa tylko 8dlatego, że stało się długim int?
George
1
@george Tak, tracisz dokładność, ponieważ R domyślnie przyjmuje 32-bitowe liczby całkowite. Druga wersja kodu wykorzystuje pakiet gmp, który pozwala na dowolnie duże liczby całkowite. Jednak szybko brakuje mi pamięci RAM do obliczania czegokolwiek powyżej n=25.
rturnbull
0

PHP, 47 49 bajtów

while($n<$argv[1])$n+=(7**++$x-1)%$x**2<1;echo$x;

Działa tylko dla n <9 ( 7**9jest większy niż PHP_INT_MAX64-bitowy)

62 bajty przy użyciu liczb całkowitych o dowolnej długości: (nie testowano; PHP na moim komputerze nie ma bcmath)

for($x=$n=1;$n<$argv[1];)$n+=bcpowmod(7,++$x,$x**2)==1;echo$x;

Uruchom z php -nr '<code>' <n>.

pseudo kod

implicit: $x = 0, $n = 0
while $n < first command line argument
    increment $x
    if equation is satisfied
        increment $n
print $x
Tytus
źródło
0

Pyke, 10 bajtów

~1IX7i^tR%

Wypróbuj tutaj!

~1         -  infinite(1)
  IX7i^tR% - filter(^, not V)
    7i^    -    7**i
       t   -   ^-1
        R% -  ^ % v
   X       -   i**2
           - implicit: print nth value
niebieski
źródło
0

Clojure , 83 bajty

(fn[n](nth(filter #(= 0(rem(-(reduce *(repeat % 7N))1)(* % %)))(iterate inc 1N))n))

Wypróbuj online!

To buduje nieskończoną listę Java BigIntegers od 1 i filtruje je według definicji. Wykorzystuje indeksowanie od zera do wybrania n- tej wartości z filtrowanej listy.

mile
źródło
0

Perl 5, 35 bajtów

Cóż, tego brakowało, więc oto:

map{$_ if!((7**$_-1)%($_**2))}1..<>

ChatterOne
źródło
0

PowerShell, za dużo bajtów

Żeby zobaczyć, czy to możliwe i tak jest.

[System.Linq.Enumerable]::Range(1,10000)|?{[System.Numerics.BigInteger]::Remainder([System.Numerics.BigInteger]::Pow(7,$_)-1,$_*$_) -eq 0}
Jessica
źródło
0

Perl 6 , 35 34 bajtów

{grep({(7**$_-1)%%$_²},^∞)[$_]}

0-indeksowane.

Ogolił się jeden bajt dzięki Bradowi Gilbertowi.

Sean
źródło
grep jest podprogramem, więc możesz usunąć spację, jeśli umieścisz za nim parens{grep(…)}
Brad Gilbert b2gills
0

QBIC , 39 bajtów

:{~(7^q-1)%(q^2)=0|b=b+1]~b=a|_Xq\q=q+1

Nie mogłem go uruchomić w QBasic 4.5, ale wydaje się, że działa dobrze w QB64. Z jakiegoś niewytłumaczalnego powodu QBasic odmawia czystego podzielenia 13 841 287 200 przez 144, ale zamiast tego daje resztę -128. Następnie zwraca 16 jako siódmy element tej sekwencji zamiast 12 ...

:{      get N from the command line, start an infinite DO-loop
~       IF
(7^q-1) Part 1 of the formula (Note that 'q' is set to 1 as QBIC starts)
%       Modulus
(q^2)   The second part
=0      has no remainder
|b=b+1  Then, register a 'hit'
]       END IF
~b=a    If we have scored N hits
|_Xq    Quit, printing the last used number (q)
\q=q+1  Else, increase q by 1. 
        [DO-loop and last IF are implicitly closed by QBIC]
Steenbergh
źródło
0

Cud , 28 bajtów

@:^#0(!>@! % - ^7#0 1^#0 2)N

Zero indeksowane. Stosowanie:

(@:^#0(!>@! % - ^7#0 1^#0 2)N)2

Filtruje z listy liczb naturalnych z predykatem, który określa, czy x^2można ją podzielić 7^x-1, a następnie otrzymuje n-ty element na tej liście.

Mama Fun Roll
źródło
0

Tcl , 73 bajty

while {[incr i]} {if 0==(7**$i-1)%$i**2 {incr j;if $j==$n break}}
puts $i

Wypróbuj online!

sergiol
źródło