Kadang-kadang, ketika saya iseng mencoba faktor apa pun nomor muncul di depan saya in, setelah beberapa saat saya menyadari itu lebih mudah daripada yang saya pikirkan. Ambil 2156
contoh: akhirnya terjadi kepada saya bahwa baik 21
dan 56
merupakan kelipatan dari 7
, dan begitu tentu 2156 = 21 x 100 + 56
juga merupakan kelipatan 7
.
Tugas Anda adalah menulis beberapa kode yang mengidentifikasi angka-angka yang lebih mudah difaktorkan karena kebetulan seperti ini.
Lebih tepatnya:
Tulis program atau fungsi yang mengambil bilangan bulat positif n
sebagai input, dan mengembalikan nilai kebenaran jika ada pembagi d
(lebih besar dari 1
) sehingga n
dapat dipotong menjadi dua untuk menghasilkan dua bilangan bulat positif, masing-masing merupakan kelipatan dari d
; mengembalikan nilai yang salah jika tidak.
- "Cincang dua" berarti apa yang Anda pikirkan: representasi basis-10 yang biasa
n
dipartisi pada beberapa titik menjadi setengah bagian depan dan setengah belakang untuk menghasilkan dua bilangan bulat basis-10 lainnya. Tidak apa-apa jika bilangan bulat kedua memiliki nol di depan (tetapi perhatikan bahwa itu harus bilangan bulat positif, jadi pisahkan1230
menjadi123
dan0
tidak valid). - Nilai kebenaran dan kepalsuan dapat bergantung pada input. Misalnya, jika ada bilangan bulat bukan kebenaran dalam bahasa pilihan Anda, maka Anda dipersilakan untuk mengembalikan pembagi
d
atau salah satu "bagian" darin
(ataun
itu sendiri dalam hal ini). - Misalnya, setiap angka genap dengan setidaknya dua digit di set
{2, 4, 6, 8}
akan menghasilkan nilai yang benar: hanya membaginya setelah angka genap pertama. Sebagai contoh, setiap bilangan priman
akan menghasilkan nilai palsu, seperti halnya bilangan satu digit. - Perhatikan bahwa cukup untuk mempertimbangkan pembagi utama
d
. - Anda dapat berasumsi bahwa input tersebut valid (yaitu, bilangan bulat positif).
Ini adalah kode-golf , jadi kode terpendek dalam byte menang. Tetapi solusi dalam semua bahasa dipersilahkan, sehingga kami dapat mengusahakan kode terpendek di setiap bahasa, bukan hanya kode terpendek secara keseluruhan.
Uji kasus
(Anda hanya perlu menampilkan nilai yang benar atau salah; penjelasan di bawah ini hanya dengan penjelasan.) Beberapa input yang menghasilkan nilai yang benar adalah:
39 (3 divides both 3 and 9)
64 (2 divides both 6 and 4)
497 (7 divides both 49 and 7)
990 (splitting into 99 and 0 is invalid; but 9 divides both 9 and 90)
2233 (11 divides both 22 and 33)
9156 (3 divides both 9 and 156; or, 7 divides both 91 and 56)
11791 (13 divides both 117 and 91)
91015 (5 divides both 910 and 15)
1912496621 (23 divides both 1912496 and 621; some splittings are multiples of 7 as well)
9372679892 (2473 divides both 937267 and 9892; some splittings are multiples of 2 as well)
Beberapa input yang menghasilkan nilai palsu adalah:
52
61
130 (note that 13 and 0 is not a valid splitting)
691
899
2397
9029
26315
77300 (neither 7730 and 0 nor 773 and 00 are valid splittings)
2242593803
¹ ya saya benar-benar melakukan ini