Angka x sedemikian sehingga x ^ 2 membagi 7 ^ x-1

16

Tugas

Ada satu set angka x, sehingga x^2terbagi 7^x-1.

Tugas Anda adalah menemukan angka-angka ini. Diberikan input n, kode akan mencetak nomor ke-n yang mengikuti aturan ini.

Contoh 1 indeks

In   Out
3    3
9    24
31   1140

Urutan yang relevan dapat ditemukan di sini .

Aturan

Jawaban terpendek akan menjadi pemenang *

Aturan main golf standar berlaku

Celah tidak diizinkan

Jawaban Anda bisa 0 atau 1 diindeks, sebutkan jawaban Anda

George
sumber
@nimi Saya menuliskan ini saat merencanakan dan tidak pernah mengimplementasikannya. Saya telah memperbarui pertanyaan
george
Apa batasannya n? Saya dapat memberikan hasil yang benar n=9, tetapi n=10sudah menyebabkan masalah bagi saya.
briantis
@ Briantist Jika Anda mendapatkan hasil yang salah untuk nilai input yang lebih tinggi, jawaban Anda salah. Jika hanya membutuhkan waktu lama, itu bisa tergantung pada implementasi.
mbomb007
Ini tidak hanya memakan waktu lama. n=10memberi saya 32; itu karena ia mulai menggunakan double bukan bilangan bulat dan mod salah setelah itu. :(
briantis

Jawaban:

8

Haskell, 34 byte

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

Ini menggunakan pengindeksan berbasis 0. Contoh penggunaan: ([x|x<-[1..],mod(7^x-1)(x^2)<1]!!) 30-> 1140.

Ini adalah implementasi langsung dari definisi tersebut. Itu membangun daftar semua angka xdan mengambil nth.

nimi
sumber
5

Pyth , 10 byte

e.f!%t^7Z*

Program yang mengambil input bilangan bulat dan mencetak nilai satu indeks.

Cobalah online!

Bagaimana itu bekerja

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
sumber
5

JavaScript (ES7), 40 byte

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

Ini kehilangan presisi cukup cepat karena fakta bahwa JS kehilangan ketepatan oleh 7**19. Berikut ini adalah versi ES6 yang nyaris arbitrer:

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

Ini selesai dalam waktu sekitar satu detik untuk test case 31.

Beberapa pendekatan lagi:

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
Produksi ETH
sumber
4

05AB1E , 11 byte

µ7Nm<NnÖiN¼

Cobalah online!

Untuk beberapa alasan saya tidak bisa masuk ½kerja µ7Nm<NnÖ½Natau saya akan terikat dengan 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)

.

Guci Gurita Ajaib
sumber
Ya, saya punya masalah dengan Ödaftar perbaikan saya selama berbulan-bulan tapi saya tidak pernah berurusan dengan itu. Bagaimanapun, Anda tidak memerlukan Nkarena µsecara otomatis menampilkan yang terakhir Njika tumpukan kosong.
Emigna
4

Python 2 , 48 46 byte

Berkat @Dennis untuk -2 byte!

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

Fungsi rekursif satu-indeks yang mengambil input melalui argumen dan mengembalikan hasilnya.

Cobalah online!(Batas rekursi meningkat untuk memungkinkan kasus uji akhir berjalan)

Bagaimana itu bekerja

nadalah indeks yang diinginkan, dan imerupakan variabel penghitungan.

Ekspresi ~-7**i%i**2<1mengembalikan True(setara dengan 1) jika i^2membagi 7^i - 1, dan False(setara dengan 0) sebaliknya. Setiap kali fungsi dipanggil, hasil dari ekspresi dikurangkan dari n, mengurangi nsetiap kali hit ditemukan; ijuga bertambah.

Perilaku hubungan arus pendek dari andberarti bahwa ketika nadalah 0, 0dikembalikan; ini adalah kasus dasar. Setelah ini tercapai, rekursi berhenti, dan nilai saat iini dikembalikan oleh panggilan fungsi asli. Alih-alih menggunakan secara eksplisit i, ini dilakukan menggunakan fakta bahwa untuk setiap panggilan fungsi, peningkatan telah dilakukan menggunakan -~di depan panggilan; penambahan 0 iwaktu memberi i, sesuai kebutuhan.

TheBikingViking
sumber
1
(~-7**i%i**2<1)menghemat beberapa byte.
Dennis
@ Dennis Tentu saja! Terima kasih.
TheBikingViking
3

Python 2 , 57 53 51 byte

-4 byte berkat ETHproduk
-2 byte berkat TuukkaX

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

Cobalah online!
urutannya adalah 1-diindeks

tongkat
sumber
@ ETHproduk ya c:
Rod
Apakah testcase gagal jika Anda menghapus tanda kurung di sekitar (7**i)? Saya menghapusnya dan itu berhasil untuk yang saya coba.
Yytsi
@ TuukkaX memang, **memiliki prioritas lebih tinggi daripada ~dan-
Rod
2

Python 2, 57 byte

Ini membutuhkan waktu yang sangat, sangat lama untuk nilai yang besar. Ini juga menggunakan banyak memori, karena membangun seluruh daftar lebih jauh dari yang diperlukan. Hasilnya nol-diindeks.

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

Cobalah online

mbomb007
sumber
karena penasaran, apakah ada bukti untuk 2**n+1batas atas?
Rod
@Rod Bukan yang saya tahu, tetapi mengingat bahwa ada 50 nilai <5000, saya yakin ada lebih dari 50 < 2**50. Saya bisa menggunakan 9**n+9, tetapi butuh jauh lebih lama. Saya mulai berlari f(20)beberapa saat yang lalu (dengan 2**n+1); masih belum selesai.
mbomb007
Saya bahkan tidak berpikir ada bukti bahwa urutannya tidak terbatas, apalagi batas atas yang bagus untuk istilah ke-n!
Greg Martin
2

Mathematica, 43 byte

Saat ini saya punya tiga solusi berbeda pada hitungan byte ini:

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
sumber
Apa karakter antara x ^ 2 dan (7 ^ x ... di baris pertama? Tampak seperti pipa tetapi lebih pendek
Sefa
@ Sefa Ini adalah karakter Unicode untuk simbol "membagi" matematika dan digunakan oleh Mathematica sebagai operator untuk Divisible.
Martin Ender
Inilah satu per 41 Bytes: Cases[Range[#^3],x_/;x^2∣(7^x-1)][[#]]&berdasarkan argumen heuristik bahwa n ^ 3 adalah batas atas. Saya telah menemukan bukti yang benar-benar luar biasa dari hal ini, yang margin ini terlalu sempit untuk dikandung :)
Kelly Lowder
2

PARI / GP , 42 byte

Cukup mudah. 1-diindeks, meskipun ini dapat dengan mudah diubah.

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

atau

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

Python 3 , 45 byte

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

Return True untuk input 1 , yang diizinkan secara default .

Cobalah online!

Dennis
sumber
Saya tidak dapat menguji ini saat ini, tetapi saya menganggap itu mengembalikan nilai untuk input lain? Daripada bool?
george
1

R, 35 byte

Ini hanya berfungsi untuk n<=8.

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

Namun, ini versi yang lebih panjang yang cocok n<=25untuk 50 byte :

z=1:1e6;which(gmp::as.bigz(7^z-1)%%z^2==0)[scan()]
rturnbull
sumber
Apakah ini hanya berhasil 8karena menjadi int panjang?
george
1
@george Ya, Anda kehilangan keakuratan karena R default ke bilangan bulat 32 bit. Versi kedua dari kode menggunakan paket gmp,, yang memungkinkan bilangan bulat besar yang sewenang-wenang. Namun, saya cepat kehabisan RAM untuk komputasi apa pun di atas n=25.
rturnbull
0

PHP, 47 49 byte

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

Hanya bekerja untuk n <9 ( 7**9lebih besar dari PHP_INT_MAXdengan 64bit)

62 byte menggunakan bilangan bulat panjang acak: (tidak diuji; PHP di komputer saya tidak memiliki bcmath)

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

Jalankan dengan php -nr '<code>' <n>.

kode semu

implicit: $x = 0, $n = 0
while $n < first command line argument
    increment $x
    if equation is satisfied
        increment $n
print $x
Titus
sumber
0

Pyke, 10 byte

~1IX7i^tR%

Coba di sini!

~1         -  infinite(1)
  IX7i^tR% - filter(^, not V)
    7i^    -    7**i
       t   -   ^-1
        R% -  ^ % v
   X       -   i**2
           - implicit: print nth value
Biru
sumber
0

Clojure , 83 byte

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

Cobalah online!

Ini membangun daftar Java BigIntegers yang tak terbatas mulai dari 1 dan memfilternya berdasarkan definisi. Ini menggunakan pengindeksan berbasis nol untuk memilih nilai ke- n dari daftar yang difilter.

mil
sumber
0

Perl 5, 35 Bytes

Nah, ini hilang, jadi ini dia:

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

Obrolan
sumber
0

Powershell, terlalu banyak byte

Hanya untuk melihat apakah itu mungkin dan apakah itu mungkin.

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

Perl 6 , 35 34 byte

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

Diindeks 0.

Dicukur satu byte berkat Brad Gilbert.

Sean
sumber
grep adalah subroutine sehingga Anda dapat menghapus ruang jika Anda meletakkan parens setelah itu{grep(…)}
Brad Gilbert b2gills
0

QBIC , 39 byte

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

Saya tidak bisa menjalankannya di QBasic 4.5, tetapi sepertinya berjalan baik di QB64. Untuk beberapa alasan yang tidak bisa dijelaskan, QBasic menolak untuk secara bersih membagi 13.841.287.200 dengan 144, tetapi sebaliknya memberikan sisa -128. Kemudian mengembalikan 16 sebagai istilah ke 7 dari urutan ini, bukan 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
sumber
0

Bertanya-tanya , 28 byte

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

Diindeks nol. Pemakaian:

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

Filter dari daftar bilangan asli dengan predikat yang menentukan apakah x^2dapat dibagi oleh 7^x-1, kemudian mendapatkan item ke-n dalam daftar itu.

Mama Fun Roll
sumber
0

Tcl , 73 byte

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

Cobalah online!

sergiol
sumber