Definisi
Angka positif jika lebih besar dari nol.
Angka ( A
) adalah pembagi nomor lain ( B
) jika A
dapat dibagi B
tanpa sisa.
Misalnya, 2
adalah pembagi 6
karena 2
bisa membelah 6
tanpa sisa.
Tujuan
Tugas Anda adalah menulis program / fungsi yang mengambil angka positif dan kemudian menemukan semua pembagi nya.
Larangan
- Anda tidak boleh menggunakan bawaan apa pun yang terkait dengan prima atau faktorisasi .
- Kompleksitas algoritma Anda tidak boleh melebihi O (sqrt (n)) .
Kebebasan
- Daftar output dapat berisi duplikat.
- Daftar output tidak perlu disortir.
Mencetak gol
Ini adalah kode-golf . Solusi terpendek dalam byte menang.
Testcases
input output
1 1
2 1,2
6 1,2,3,6
9 1,3,9
code-golf
arithmetic
restricted-source
number-theory
restricted-complexity
Biarawati Bocor
sumber
sumber
O(sqrt(n))
.99 (1 3 9 11 33 99)
Jawaban:
PostgreSQL, 176 byte
SqlFiddleDemo
Memasukkan:
(SELECT ...v)
Bagaimana itu bekerja:
(SELECT ...v)
- memasukkangenerate_series(1, sqrt(v)::int)
- angka dari 1 hingga sqrt (n)WHERE v%r=0
pembagi-filterSELECT r FROM c UNION SELECT v/r FROM c
sisa pembagi dan menggabungkanSELECT string_agg(r::text,',' ORDER BY r)
menghasilkan hasil akhir yang dipisahkan komaMasukan sebagai tabel:
SqlFiddleDemo
Keluaran:
sumber
C # 6, 75 byte
Berdasarkan solusi C # dari downrep_nation, tetapi rekursif dan golf lebih lanjut menggunakan beberapa fitur baru dari C # 6.
Algoritma dasar sama dengan yang disajikan oleh downrep_nation. For-loop diubah menjadi rekursi, dengan demikian parameter kedua. awal rekursi dilakukan oleh parameter default, sehingga fungsinya dipanggil dengan nomor awal tunggal yang diperlukan saja.
Karena sebagian besar jawaban di sini (belum) tidak mengikuti format output yang tepat dari contoh, saya menyimpannya apa adanya, tetapi sebagai kekurangannya fungsi ini menyertakan koma jejak tunggal pada hasilnya.
sumber
R ,
3631 byteCobalah online!
-5 byte terima kasih kepada Robin Ryder
sumber
n^.5
bukannyasqrt(n)
.1
berkali-kali.Matlab, 48 byte
sumber
sqrt(n)
dan kemudian menempatkan masing-masing pembagid
dann/d
dalam daftar saya.b=~mod(n,a)
untuk menyimpan 1 byte?J, 26 byte
Penjelasan
sumber
JavaScript (ES6) - 48 byte
Tidak terlalu efisien tetapi berfungsi! Contoh di bawah ini:
sumber
MATL , 12 byte
Pendekatannya mirip dengan yang ada di jawaban @ flawr .
Cobalah online!
Penjelasan
sumber
05AB1E ,
1412 byteKode:
Penjelasan:
Menggunakan pengodean CP-1252 . Cobalah online! .
sumber
Python 2, 64 byte
Fungsi anonim ini menampilkan daftar pembagi. Pembagi dihitung dengan pembagian percobaan bilangan bulat dalam kisaran
[1, ceil(sqrt(n))]
, yaituO(sqrt(n))
. Jikan % x == 0
(setara dengann%x<1
), maka keduax
dann/x
yang pembagi darin
.Cobalah online
sumber
Jelly , 9 byte
Sebagai jawaban lain, ini adalah O (√n) jika kita membuat asumsi (salah) bahwa pembagian bilangan bulat adalah O (1) .
Bagaimana itu bekerja
Cobalah online!
sumber
Javascript, 47 byte
sumber
Mathematica, 50 byte
Mirip dengan solusi @ flawr .
Melakukan pembagian jejak untuk x dari 1 hingga akar kuadrat dari n dan jika dapat dibagi, menyimpannya ke daftar sebagai x dan n / x .
∣
membutuhkan 3 byte untuk mewakili dalam UTF-8, membuat string 48 karakter membutuhkan 50 byte dalam representasi UTF-8.Pemakaian
sumber
JavaScript (ES6),
6662 byteSaya pikir saya akan menulis versi yang mengembalikan daftar deduplicated yang diurutkan, dan ternyata ternyata 4 byte lebih pendek ...
sumber
C #, 87 byte
Golf
Tidak disatukan
Kode lengkap
Rilis
87 bytes
- Solusi awal.Catatan
var
dan danint
bukannyaString
danInt32
untuk membuat kode lebih pendek, sedangkan dalam Kode Tidak Lengkap dan Kode Lengkap saya menggunakanString
danInt32
untuk membuat kode lebih mudah dibaca.sumber
for
secara umum lebih baik daripadawhile
.for
loop akan memiliki panjang yang sama denganwhile
loop. Dalam hal ini tidak relevan memiliki atau memiliki yang lain.Lua, 83 byte
Sayangnya, saya tidak bisa berbuat lebih baik
sumber
Perl 6 , 40 byte
Penjelasan:
Pemakaian:
sumber
c #, 87 byte
saya tidak tahu apakah ini bekerja untuk semua angka, saya kira itu berhasil.
tapi kerumitannya benar, jadi itu sudah bukan sesuatu
sumber
Ruby, 56 byte
sumber
Kode mesin IA-32, 27 byte
Hexdump:
Kode sumber (sintaks MS Visual Studio):
Parameter pertama (
ecx
) adalah pointer ke output, parameter kedua (edx
) adalah angka. Itu tidak menandai akhir output dengan cara apa pun; kita harus mengisi array keluaran dengan nol untuk menemukan akhir daftar.Program C ++ lengkap yang menggunakan kode ini:
Keluaran memiliki beberapa gangguan, meskipun mengikuti spesifikasi (tidak perlu untuk menyortir; tidak perlu untuk keunikan).
Masukan: 69
Keluaran:
Pembagi berpasangan.
Input: 100
Keluaran:
Untuk kuadrat sempurna, pembagi terakhir adalah keluaran dua kali (itu adalah pasangan dengan dirinya sendiri).
Input: 30
Keluaran:
Jika input dekat dengan kuadrat sempurna, pasangan terakhir adalah keluaran dua kali. Itu karena urutan cek dalam loop: pertama, ia memeriksa "sisa = 0" dan output, dan hanya kemudian memeriksa "quotient <divisor" untuk keluar dari loop.
sumber
SmileBASIC, 49 byte
Menggunakan fakta bahwa
D>N/D
=D>sqrt(N)
untuk bilangan positifsumber
C,
8781 byteDitingkatkan oleh @ceilingcat , 81 byte:
Cobalah online!
Jawaban asli saya, 87 byte:
Kompilasi dengan
gcc div.c -o div -lm
, dan jalankan dengan./div <n>
.Bonus: Varian yang lebih pendek dengan kompleksitas waktu O (n) dan hardcoded
n
(46 byte + panjangn
):Sunting: Terima kasih kepada @Sriotchilism O'Zaic karena menunjukkan bahwa input tidak boleh di-hardcode, saya memodifikasi pengiriman utama untuk mengambil input melalui argv.
sumber
n
input? Memasukkan input ke dalam variabel bukan cara yang diterima untuk melakukan input di sini karena sejumlah alasan. Anda dapat melihat lebih lanjut tentang formulir input dan output yang diterima dan tidak diterima di sini: codegolf.meta.stackexchange.com/questions/2447/… . Dan jika Anda ingin tahu tentang bahasa tertentu (misalnya C), Anda dapat melihat di sini: codegolf.meta.stackexchange.com/questions/11924/… .n
adalah input. Saya akan mencoba memodifikasinya sehingga dibutuhkan input dengan cara lain. Terima kasih atas informasinya!APL (NARS), 22 karakter, 44 byte
uji:
sumber
C # (Visual C # Interactive Compiler) , 40 byte
Hanya memberikan jawaban C # yang diperbarui
Cobalah online!
sumber