Definisi
Biarkan m
dan n
menjadi bilangan bulat positif. Kami mengatakan bahwa m
adalah twist yang pembagi dari n
jika ada bilangan bulat 1 < a ≤ b
sehingga n = a*b
dan m = (a - 1)*(b + 1) + 1
. Jika m
dapat diperoleh dari n
dengan menerapkan nol atau lebih tikungan pembagi untuk itu, maka m
adalah keturunan dari n
. Perhatikan bahwa setiap angka adalah turunannya sendiri.
Sebagai contoh, pertimbangkan n = 16
. Kita dapat memilih a = 2
dan b = 8
sejak itu 2*8 = 16
. Kemudian
(a - 1)*(b + 1) + 1 = 1*9 + 1 = 10
yang menunjukkan bahwa itu 10
adalah twist pembagi 16
. Dengan a = 2
dan b = 5
, kita kemudian melihat bahwa itu 7
adalah twist pembagi 10
. Jadi itu 7
adalah keturunan 16
.
Tugas
Diberikan bilangan bulat positif n
, hitung keturunan n
, terdaftar dalam urutan yang meningkat, tanpa duplikat.
Aturan
Anda tidak diizinkan untuk menggunakan operasi bawaan yang menghitung pembagi nomor.
Baik program dan fungsi penuh diterima, dan mengembalikan tipe data koleksi (seperti jenis tertentu) diizinkan, asalkan itu diurutkan dan bebas duplikat. Hitungan byte terendah menang, dan celah standar tidak diizinkan.
Uji Kasus
1 -> [1]
2 -> [2] (any prime number returns just itself)
4 -> [4]
16 -> [7, 10, 16]
28 -> [7, 10, 16, 25, 28]
51 -> [37, 51]
60 -> [7, 10, 11, 13, 15, 16, 17, 18, 23, 25, 28, 29, 30, 32, 43, 46, 49, 53, 55, 56, 60]
sumber
<
untuk bilangan asli, untuk setiap n Anda mendapatkan setiap angka lebih kecil dari itu tetapi tidak sendiri. Saya pikir ini harus menjadi sesuatu yang serupa. Dengan cara ini saya pikir hanya 4 akan menjadi keturunannya sendiri (meskipun tidak yakin tentang itu).Jawaban:
Python 2,
109988582 byteSejak
(a-1)*(b+1)+1 == a*b-(b-a)
danb >= a
, keturunan selalu kurang dari atau sama dengan angka aslinya. Jadi kita bisa mulai dengan angka awal dan terus menghasilkan keturunan yang sangat kecil sampai tidak ada yang tersisa.Kondisi
(n<x*x)>n%x
memeriksa dua hal dalam satu - itun<x*x
dann%x == 0
.(Terima kasih kepada @xnor karena melepaskan 3 byte dari casing dasar)
Pyth, 32 byte
Terjemahan langsung di atas, kecuali fakta bahwa Pyth tampaknya tersedak ketika mencoba menjumlahkan (
s
) pada daftar kosong.Ini mendefinisikan fungsi
y
yang dapat dipanggil dengan menambahkany<number>
pada akhirnya, seperti itu ( coba online ):CJam,
4745 byteJuga menggunakan metode yang sama, dengan beberapa modifikasi. Saya ingin mencoba CJam untuk perbandingan, tetapi sayangnya saya jauh lebih buruk di CJam daripada saya di Pyth / Python, jadi mungkin ada banyak ruang untuk perbaikan.
Di atas adalah blok (pada dasarnya versi CJam tentang fungsi yang tidak disebutkan namanya) yang mengambil int dan mengembalikan daftar. Anda dapat mengujinya seperti itu ( coba online ):
sumber
set()
di sana? Tidak bisakah Anda mengembalikan daftar yang disortir?set()
adalah untuk menghapus duplikat :)[n]+sum(...,[])
sepertisum(...,[n])
?[]
sebagai dasar untuk menjumlahkan daftar, jadi saya benar-benar lupa!Java,
148146104 byteVersi golf:
Versi panjang:
Jadi saya membuat debut saya di PPCG dengan program ini, yang menggunakan
TreeSet
(yang secara otomatis mengurutkan angka, untungnya) dan rekursi yang mirip dengan program Geobits, tetapi dengan cara yang berbeda, memeriksa kelipatan n dan kemudian menggunakannya di fungsi selanjutnya. Saya akan mengatakan ini adalah skor yang cukup adil untuk pemula (terutama dengan Java, yang sepertinya bukan bahasa yang paling ideal untuk hal semacam ini, dan bantuan Geobits).sumber
a*b
ken
jalur 9.c=n+a-b
dalamadd()
. Atau, Anda bisa menyingkirkanc
semuanya dan hanya menggunakann+a-b
di kedua tempat untuk dua byte yang sama.add
dua kali. Tunggu sebentar ...a
yang Anda tahu terbagi dengann
bersih, maka Anda tidak perlu mengulang untuk menemukannyab
, hanya sajan/a
. Pada titik itu mulai semakin dekat dan dekat dengan saya;)Jawa,
157121Berikut adalah fungsi rekursif yang mendapat keturunan dari setiap keturunan
n
. Ini mengembalikan aTreeSet
, yang diurutkan secara default.Dengan beberapa jeda baris:
sumber
Oktaf,
10796Cukup cetak:
sumber
end
daripadaendfor
danendfunction
. Itu akan menghemat 11 byte.Haskell,
102100 bytePenggunaan:
p 16
output mana[7,10,16]
Fungsi ini
d
secara rekursif menghitung semua keturunan, tetapi tidak memeriksa duplikat, sehingga banyak yang muncul lebih dari sekali, misalnyad [4]
mengembalikan daftar4
s yang tak terbatas . Fungsip
mengambiln
elemen pertama dari daftar ini, menghapus duplikat dan mengurutkan daftar. Voa.sumber
CJam - 36
Cobalah online
Atau, metode yang berbeda:
Saya menulisnya hampir 2 hari yang lalu, macet pada usia 36, merasa frustrasi dan pergi tidur tanpa memposting.
sumber