pengantar
Dalam teori bilangan, kita katakan bilangan adalah halus ketika faktor utamanya paling banyak . Misalnya, 2940 adalah 7-halus karena .
Di sini, kita mendefinisikan pasangan -smooth sebagai dua bilangan bulat berturut-turut yang keduanya -smooth. Contoh dari pasangan 7-halus akan karena dan . Fakta menyenangkan: Ini sebenarnya adalah pasangan 7-halus terbesar .
Størmer membuktikan pada tahun 1897 bahwa untuk setiap , hanya ada banyak pasangan -smooth , dan fakta ini dikenal sebagai Teorema Størmer. .
Tantangan
Tugas Anda adalah untuk menulis sebuah program atau fungsi yang, dengan memberikan bilangan prima input , mengeluarkan atau mengembalikan semua pasangan -mulus tanpa duplikat (urutan dalam pasangan tidak menjadi masalah) dalam urutan apa pun yang Anda inginkan.
Harap dicatat bahwa untuk bilangan prima dan , dengan asumsi , semua pasangan -smooth juga merupakan pasangan -smooth.
Contoh I / O
Input: 2
Output: (1, 2)
Input: 3
Output: (1, 2), (2, 3), (3, 4), (8, 9)
Input: 5
Output: (1, 2), (2, 3), (3, 4), (4, 5), (5, 6), (8, 9), (9, 10), (15, 16), (24, 25), (80, 81)
Input: 7
Output: (1, 2), (2, 3), (3, 4), (4, 5), (5, 6), (6, 7), (7, 8), (8, 9), (9, 10), (14, 15),
(15, 16), (20, 21), (24, 25), (27, 28), (35, 36), (48, 49), (49, 50), (63, 64),
(80, 81), (125, 126), (224, 225), (2400, 2401), (4374, 4375)
Larangan
Program atau fungsi harus diakhiri secara teoritis dalam waktu yang terbatas untuk semua input. Celah standar tidak diizinkan secara default.
Kriteria Menang
Karena ini adalah tantangan kode-golf , pengiriman terpendek yang valid untuk setiap bahasa akan menang.
sumber
(1, 2)
bagian dari output wajib? ..(1, 2)
pasangan.Jawaban:
JavaScript (ES7),
234232 byteTemukan solusinya dengan menyelesaikan persamaan Pell dari bentukx2−2qy2=1 , di mana q adalah P angka bebas persegi square.
Ini adalah implementasi dari prosedur Derrick Henry Lehmer , yang berasal dari prosedur asli Størmer.
Mengembalikan objek yang kunci dan nilainya menggambarkan pasanganP -smooth.
Cobalah online!
Bagaimana?
Penolong fungsis tes apakah integer diberikan n adalah P sejumlah -smooth ketika itu disebut dengan i=0 , atau persegi gratis 1 P nomor -smooth ketika itu disebut dengan i=1 .
Kami mencari semua angka P- 1 persegi bebas di [ 1 .. P P - 1P [1..PP−1] , di manaPP digunakan sebagai batas atas untukP! .
Untuk setiap nomorn ditemukan di atas, kami mencari solusi mendasar dari persamaan Pell x2−ny2=1 :
(kode di atas adalah versi non-rekursif dari jawaban saya untuk tantangan lain ini )
Setelah solusi mendasar(x1,y1) ditemukan, kami menghitung solusi (xk,yk) dengan k≤max(3,(P+1)/2) , menggunakan relasi perulangan:
Untuk setiapxk , kita menguji apakah xk aneh dan kedua (xk−1)/2 dan (xk+1)/2 adalah P -smooth. Jika demikian, kita menyimpannya di objek r .
1: Karena tidak menguji keutamaan pembagi, fungsis sebenarnya akan jujur untuk beberapa nomor bebas non-persegi, bahkan ketika itu disebut dengan i=1 . Idenya adalah untuk menyaring sebagian besar dari mereka sehingga tidak banyak persamaan Pell yang tidak berguna diselesaikan.
sumber
x = ~-x / 2
dan.-~P / 2
Apakah ini semacam pembulatan ...~x
TIDAK bitwise, yang menghitung-(x+1)
. Oleh karena itu,~-x
is-(-x+1)
=x-1
dan-~x
is-(-(x+1))
=x+1
. Seperti semua operasi bitwise di JS, hanya bagian integer 32-bit yang diperhitungkan. Jadi mereka memang bisa digunakan untuk pembulatan. Tetapi dan P sudah merupakan bilangan bulat di sini.Jelly ,
1614 byteCobalah online!
Memeriksa pasangan hingga4k yang tidak efisien untuk k yang lebih besark tetapi harus memastikan tidak ada yang terlewatkan.
Terima kasih kepada @JonathanAllan karena telah menghemat 1 byte!
Penjelasan
sumber
05AB1E , 8 byte
Cobalah online!
Penjelasan:
sumber
Jelly , 123 byte
Cobalah online!
Program lengkap yang membutuhkan satu argumen,k dan mengembalikan daftar daftar pasangan. Kode di atas tidak mengurutkan hasil akhir, tetapi tautan TIO tidak.
sumber
Haskell ,
118107 byte-11 byte terima kasih kepada nimi
Cobalah online!
q n
menghitung daftar semua faktor utaman
f k
menghasilkan daftarsumber
[2..n]
dalamp
dan inline keq
. Cobalah online!Jelly , 24 byte
Cobalah online!
Ini membutuhkan waktu lama untuk 7, tetapi menghitung jauh lebih cepat jika Anda menghapus kuadrat faktorial: Coba online!
Penjelasan:
-3 byte terima kasih kepada @JonathanAllen
sumber
(8,9)
pasangan 3-halus sejak ituk!
(kecuali untuk 3, yang memiliki faktorial kecil karena jumlahnya kecil).Python 3 + sympy, 116 byte
Cobalah online!
Python 3 + sympy, 111 byte
Cobalah online!
Dua variasi pada jawaban Jelly saya tetapi dalam Python 3. Keduanya mendefinisikan fungsi yang menerima argumen
k
. Yang pertama mengembalikan daftar tupel dari pasangan yang memenuhi kriteria. Yang kedua mencetaknya ke stdout.sumber
Bahasa Wolfram (Mathematica) , 241 byte
menggunakan persamaan Pell
Cobalah online!
sumber
Pyth , 15 byte
Cobalah online!
Menggunakan pengamatan Nick Kennedy bahwa tidak ada nomor output yang lebih besar dari
4^k
.sumber
05AB1E , 16 byte
Cobalah secara online (sangat tidak efisien, jadi waktunya habisn > 3 ..) Di sini alternatif yang sedikit lebih cepat , meskipun masih cukup lambat ..
Penjelasan:
sumber
Stax , 14 byte
Jalankan dan debug itu
Ini bukan program yang sesingkat mungkin, tetapi mulai menghasilkan output segera setelah pasangan yang cocok ditemukan. Ini memang berakhir pada akhirnya , tetapi output dihasilkan saat ditemukan.
sumber
Ruby , 89 + 8 = 97 byte
Menggunakansaya dari 1 hingga 4n , petakan n -smooth, kalau tidak petakan itu
-rprime
bendera. Untuk setiap nomor[i, i+1]
jika keduanyafalse
, lalu pangkas semuafalse
dari daftar.Cobalah online!
sumber