Pertimbangkan masalah berikut:
Biarkan menjadi subset terbatas dari bilangan asli.
Biarkan | mana adalah pembagi umum terbesar dari dang c d ( s i , s j )
Cari elemen maksimum .
Masalah ini dapat diselesaikan dengan mengambil pembagi umum terbesar dari setiap pasangan menggunakan algoritma Euclid dan melacak yang terbesar.
Apakah ada cara yang lebih efisien untuk menyelesaikan ini?
algorithms
number-theory
Tommy
sumber
sumber
Jawaban:
Berikut ini adalah algoritma yang efisien (dalam Python ). Silakan temukan penjelasan di bawah ini.
Penjelasan dari cuplikan kode di atas:
Kami mengamati hal-hal berikut dalam masalah ini:
max(S)
S
max
semua angka dengan properti yang disebutkan di atas.Dengan pengamatan ini, program melakukan hal berikut:
set
daftar. Sebagai set dapat dicari secara efisien diO(log(n))
m
.m
hingga1
, cari nomor pertama yang memiliki dua atau lebih kelipatan dalam set. Angka pertama yang ditemukan adalah hasilnya.Saya harap ini jelas. Tolong beri tahu saya jika Anda membutuhkan penjelasan yang lebih rinci.
sumber
i
dimulai denganm
sampai1
kita memeriksa apakah dua atau lebih kelipatan darii
yang di set. Dalam contoh ini, dua kelipatan dari 2 berada di set '2 dan 4`. jadi jawabannya adalah 2.while
Loop dalam memeriksa semua multplesi
sampaim' as
m` adalah masx dari daftar.