pengantar
Dalam tantangan ini, kita akan berhadapan dengan grafik tak terarah tak terbatas tertentu, yang saya sebut grafik pembagi tinggi . Node-nya adalah bilangan bulat mulai dari 2. Ada tepi antara dua node a <b jika a membagi b dan a 2 ≥ b . Subgraf yang dibentuk oleh rentang 2 hingga 18 terlihat seperti ini:
16-8 12 18
\|/ |/|
4 6 9 10 15 14
| |/ |/ |
2 3 5 7 11 13 17
Dapat ditunjukkan bahwa grafik pembagi tinggi tak terbatas terhubung, sehingga kita dapat bertanya tentang jalur terpendek antara dua node.
Masukan dan keluaran
Input Anda adalah dua bilangan bulat a dan b . Anda dapat mengasumsikan bahwa 2 ≤ a ≤ b <1000 . Output Anda adalah panjang jalur terpendek antara a dan b dalam grafik pembagi tinggi tak terbatas. Ini berarti jumlah tepi di jalan.
Anda mungkin menemukan fakta berikut ini berguna: selalu ada jalur optimal dari a ke b yang pertama kali meningkat lalu menurun, dan hanya mengunjungi node yang benar-benar kurang dari 2b 2 . Khususnya, karena b <1000 Anda hanya perlu mempertimbangkan node yang kurang dari 2 000 000.
Contohnya
Pertimbangkan input 3
dan 32
. Satu jalur yang mungkin antara node 3 dan 32 adalah
3 -- 6 -- 12 -- 96 -- 32
Jalur ini memiliki empat tepi, dan ternyata tidak ada jalur yang lebih pendek, jadi output yang benar adalah 4
.
Sebagai contoh lain, jalur optimal untuk 2
dan 25
adalah
2 -- 4 -- 8 -- 40 -- 200 -- 25
jadi output yang benar adalah 5
. Dalam hal ini, tidak ada jalur optimal yang berisi node 50 = lcm(2, 25)
.
Aturan dan penilaian
Anda dapat menulis program atau fungsi lengkap. Hitungan byte terendah menang, dan celah standar tidak diizinkan. Tidak ada batasan waktu atau memori, jadi pemaksaan kasar diperbolehkan.
Uji kasus
2 2 -> 0
2 3 -> 4
2 4 -> 1
2 5 -> 5
3 5 -> 4
6 8 -> 2
8 16 -> 1
12 16 -> 2
16 16 -> 0
2 25 -> 5
3 32 -> 4
2 256 -> 3
60 77 -> 3
56 155 -> 3
339 540 -> 2
6 966 -> 4
7 966 -> 2
11 966 -> 4
2 997 -> 7
991 997 -> 4
FindShortestPath
melanggar batasan tentang celah standar? Jika ya, beri tahu saya dan saya akan menghapus kiriman saya.