Kita dapat mendefinisikan Streak Divisibilitas k
angka n
dengan menemukan bilangan bulat non-negatif terkecil k
sehingga n+k
tidak dapat dibagi k+1
.
Tantangan
Dalam bahasa pilihan Anda, tulis sebuah program atau fungsi yang menghasilkan atau mengembalikan Streak Divisibilitas dari input Anda.
Contoh:
n=13:
13 is divisible by 1
14 is divisible by 2
15 is divisible by 3
16 is divisible by 4
17 is not divisible by 5
Garis Divisibilty dari 13
adalah4
n=120:
120 is divisible by 1
121 is not divisible by 2
Garis Divisibilty dari 120
adalah1
Kasus uji:
n DS
2 1
3 2
4 1
5 2
6 1
7 3
8 1
9 2
10 1
2521 10
Lebih banyak kasus uji dapat ditemukan di sini .
Catatan
- Berdasarkan pada Project Euler Problem 601
- Urutan ini dapat ditemukan di OEIS , digeser ke bawah oleh 1.
Aturan
- Anda dapat mengasumsikan input lebih besar dari 1.
Mencetak gol
code-golf : Pengajuan dengan skor terendah akan menang.
k + 1
2, di manak
bilangan bulat positif terkecil. Maaf untuk nitpick.k
yang tidak membelahn-1
?n=7
tempatk=3
:n-1
dapat dibagi olehk
.+1
.Jawaban:
Pyth ,
65 byteCobalah online!
sumber
Java 8,
44424139 byteDicoret 44 masih teratur 44; (
-2 byte terima kasih kepada @LeakyNun .
-1 byte terima kasih kepada @TheLethalCoder .
-2 byte berkat @Nevay .
Penjelasan:
Coba di sini.
sumber
Haskell , 35 byte
Cobalah online!
Menggunakan
until
juga 35 bytesumber
Sekam , 7 byte
Cobalah online!
sumber
05AB1E ,
76 byteCobalah online!
Solusi 7 byte alternatif:
<DLÖγнg
Ls<ÑKн<
sumber
JavaScript (ES6), 28 byte
Menguji
sumber
Mathematica,
3027 byteFungsi tanpa nama yang mengambil argumen integer.
Cobalah di Wolfram Sandbox
Pemakaian:
sumber
Perl 5 ,
2321 + 1 (-p) = 22 byteCobalah online!
sumber
Python 2 , 35 byte
Cobalah online!
sumber
Cubix , 17 byte
Cobalah online!
Kubus
I1
atur tumpukan dengan input dan pembagi%?
lakukan mod dan uji;)qU)uqU
jika 0 hapus input input dan pembagi hasil. Sedikit tentang jalan untuk kembali ke%
/;(O@
jika tidak 0, drop hasil, pembagi penurunan, output dan keluarLihat saja
sumber
Python 2 ,
4341 byteDisimpan 2 byte berkat Leaky Nun !
Cobalah online!
Python 2 , 40 byte
Cobalah online!
sumber
Python 2 ,
4440 byte-4 byte terima kasih untuk Leaky Nun.
Cobalah online!
sumber
Swift 4 , 56 byte
Ini adalah fungsi penuh
f
, dengan parameter integeri
yang mencetak output.Coba di sini.
Swift 4 , 56 byte
Ini adalah fungsi anonim, yang mengembalikan hasilnya.
Coba di sini.
Lihatlah Test Suite!
sumber
C # (Mono) ,
4139 bytePada dasarnya sebuah port jawaban Java 8 @Kevin Cruijssen dengan golf lebih lanjut
Cobalah online!
sumber
dc , 28 byte
Cobalah online!
Ini terasa sangat suboptimal, dengan kenaikan dan penurunan akhir, tapi saya tidak bisa benar-benar melihat cara untuk memperbaikinya. Pada dasarnya kita hanya menambah penghitung
i
dan nilai awal kita selama nilai modi
terus menjadi nol, dan sekali itu tidak benar kita kurangi satu darii
dan cetak.sumber
Gaia , 8 byte
Cobalah online!
Penjelasan
sumber
J, 17 byte
Cobalah online!
Saya pikir masih ada ruang untuk bermain golf di sini.
Penjelasan (ungolfed)
Tutup (
[:
) ada untuk memastikan bahwa J tidak memperlakukan kata kerja terakhir ({.@I.
) sebagai bagian dari kail.Satu-satunya hal yang aneh tentang jawaban ini adalah yang
I.
benar - benar menggandakan indeks dari setiap angka bukan nol sebanyak nilai angka itu. misalnyaTapi itu tidak masalah karena kita menginginkan indeks yang pertama (dan karena
i.
memberikan rentang naik, kita tahu indeks pertama akan menjadi nilai terkecil).Akhirnya, inilah bukti yang sangat singkat bahwa valid untuk memeriksa pembagian hanya sampai
n
.Kami mulai memeriksa pembagian
1 | n
, sehingga dengan asumsi garis berjalan sejauh itu, setelah kami memeriksa pembagian yangn
kami milikin | 2n - 1
yang tidak akan pernah benar (2n - 1 ≡ n - 1 (mod n)
). Oleh karena itu, garis akan berakhir di sana.sumber
Japt , 7 byte
Uji secara online!
sumber
Kode Mesin x86, 16 byte
Fungsi di atas mengambil satu parameter
n
,, dalamECX
register. Ia menghitung garis kelonggarannyak
,, dan mengembalikannya melaluiEAX
register. Ini sesuai dengan konvensi pemanggilan panggilan cepat 32-bit , sehingga mudah dipanggil dari kode C baik menggunakan kompiler Microsoft atau Gnu.Logikanya cukup sederhana: hanya melakukan tes berulang mulai dari 1. Secara fungsional identik dengan sebagian besar jawaban lain di sini, tetapi dioptimalkan secara tangan untuk ukuran. Banyak bagus 1-byte petunjuk di sana, termasuk
INC
,DEC
,CDQ
, danXCHG
. Operan yang sulit dikodekan untuk divisi sedikit menyakiti kami, tetapi tidak terlalu buruk.Cobalah online!
sumber
PHP , 34 byte
Cobalah online!
Cukup sederhana. Periksa sisa pembagian (mod) setiap loop sambil menambah setiap nilai, output ketika nomor tidak dapat dibagi lagi.
sumber
SOGL V0.12 , 8 byte
Coba Di Sini!
Tidak buruk untuk bahasa yang dibuat untuk jenis tantangan yang sama sekali berbeda.
Penjelasan:
sumber
Mathematica, 40 byte
Cobalah online! (Matematika)
Pendekatan matematika, n + k dapat dibagi dengan k + 1 jika dan hanya jika n-1 dapat dibagi dengan k + 1. Dan n-1 tidak dapat dibagi dengan n, begitu
Range@#
juga angka yang cukup.Awalnya saya bermaksud menggunakannya
Min@Complement[Range@#,Divisors[#-1]]-1&
, tetapi ini juga berfungsi.sumber
Julia 0.6.0
(47 bytes)(38 bytes)n->(i=1;while isinteger(n/i) i+=1;n+=1 end;i-1)
n->(i=1;while n%i<1 i+=1;n+=1end;i-1)
Cobalah online!
9 byte dipotong berkat Mr.Xcoder
sumber
n->(i=1;while isinteger(n/i) i+=1;n+=1end;i-1)
n->(i=1;while n%i<1 i+=1;n+=1end;i-1)
C (gcc) , 34 byte
Cobalah online!
sumber
i--
alih-alihn=i-1
Batch, 70 byte
Semua ini dilakukan adalah menemukan yang terbesar
i
yangLCM(1..i)
membelahn-1
.sumber
R , 43 byte
Fungsi anonim.
Verifikasi semua kasus uji!
sumber
Aceto ,
2827 byteSaya bisa menghemat satu byte jika saya tidak harus keluar.
Penjelasan:
Kami menggunakan tiga tumpukan: Tumpukan kiri memegang penghitung mulai dari 2, yang tepat memegang nomor yang diberikan (atau kenaikannya), tumpukan tengah digunakan untuk melakukan operasi modulo. Kita tentu saja dapat melakukan semuanya dalam satu tumpukan, tetapi dengan cara ini kita dapat mengatur tumpukan luar menjadi "lengket" (nilai-nilai yang muncul tidak benar-benar dihapus) dan menyelamatkan diri kita dari banyak operasi duplikasi. Berikut metode secara rinci:
Baca bilangan bulat, tambah, buat tumpukan saat ini lengket, dan "pindahkan" itu (dan diri kita sendiri) ke tumpukan di sebelah kiri:
Pergi satu tumpukan lagi ke kiri, tekan 2 literal, buat tumpukan ini lengket juga. Ingat posisi ini dalam kode (
@
), dan "pindahkan" nilai dan diri kita ke tumpukan tengah lagi.Sekarang kami menguji: Apakah modulo dari dua angka teratas bukan 0? Jika demikian, lompat ke ujung, jika tidak pergi satu tumpukan ke kanan, naikkan, dan dorong nilai dan kita ke tengah. Lalu pergi ke tumpukan kiri, tambahkan juga, dan melompat kembali ke tanda yang kita atur sebelumnya.
Ketika hasil modulo tidak nol, kami membalikkan posisi IP bergerak, pergi satu tumpukan ke kiri (tempat penghitung kami hidup), kurangi, dan cetak nilainya, lalu keluar.
sumber
Ruby,
343231 byteLambda rekursif. Masih baru di Ruby, jadi saran dipersilahkan!
Cobalah online!
sumber
F #,
86 byte84 byteCobalah online!
Edit: -2 karakter dari Oliver
sumber
r = if
?Befunge , 19 byte
Cobalah online!
sumber