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


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


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

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

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)

.


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.


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


@ 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


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,#]&

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


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()]

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

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

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.


0

Perl 5, 35 Bytes

Nah, ini hilang, jadi ini dia:

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


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}

0

Perl 6 , 35 34 byte

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

Diindeks 0.

Dicukur satu byte berkat Brad Gilbert.


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]

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.


Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.