Algoritma untuk memeriksa sama ada senarai integer adalah coprime berpasangan

user2782067 06/12/2018. 3 answers, 684 views
algorithms primes

Adakah ketiga-tiga algoritma yang cekap untuk memeriksa sama ada senarai integer adalah coprime berpasangan, atau akan algoritma yang lebih umum menjadi pilihan terbaik?

3 Answers


Draconis 06/12/2018.

Pertama, dua fakta mengenai integer coprime:

  • Iff $ a $ dan $ b $ adalah coprime, maka $ ab = \ mathrm {lcm} (a, b) $
  • Iff $ a $ adalah coprime kepada $ b $ dan $ c $, maka $ a $ adalah coprime kepada $ bc $

Berikut adalah satu set integer yang berbeza $ \ {a, b, \ cdots z \} $ adalah coprime berpasangan jika produknya adalah sama dengan beberapa yang paling tidak biasa.

Anda boleh mengira beberapa gandaan yang kurang umum dengan menggunakan identiti berikut:

$$ \ mathrm {lcm} (a, b, c) = \ mathrm {lcm} (a, \ mathrm {lcm} (b, c)) $$

Dengan mengandaikan bahawa anda mempunyai nombor $ n $ dengan $ k $ setiap digit, dan mengalikan / membahagi / memodenkan dua nombor ialah $ O (1) $ (yang mungkin atau tidak mungkin andaian baik bergantung pada model anda), maka:

  • Mengira produk set anda mengambil $ O (n) $
  • Mengira gcd dua nombor mengambil $ O (k) $
  • Mengira bilangan dua nombor itu juga mengambil $ O (k) $, dengan pengurangan kepada gcd
  • Oleh itu mengira lcm keseluruhan set anda mengambil $ O (nk) $

Oleh itu, kerumitan masa keseluruhan algoritma adalah $ O (nk) $.


D.W. 06/13/2018.

Ya. Pendekatan naif memeriksa setiap pasangan nombor mengambil masa kuadratik, tetapi ada algoritma yang lebih efisien. Terdapat algoritma masa hampir-linear, seperti yang dijelaskan di dalam kertas berikut:

Daniel J. Bernstein. Pemfaktoran ke dalam coprime pada masa yang bersifat linier . Jurnal Algoritma 54 (2005), 1 - 30.

Lihat juga https://cstheory.stackexchange.com/q/3393/5038 . Itu hampir sama dengan yang anda mungkin dapat.

Untuk menjelaskan bagaimana ini dapat membantu dengan situasi anda, sebaik sahaja anda mendapati asas coprime dan memfokuskan setiap elemen berdasarkan asasnya, adalah sepele untuk memeriksa sama ada ia adalah coprime berpasangan: jika ia bukan coprime berpasangan, maka sesetengah pasangan akan mempunyai persamaan faktor, dan itu akan menjadi faktor yang ada pada dasarnya dan yang ada dalam faktorisasi kedua-duanya. Sekiranya tidak ada faktor yang biasa berlaku dalam pemfaktoran dua atau lebih nombor, maka anda tahu nombor tersebut adalah coprime berpasangan. Sebaik sahaja anda mempunyai factorisasi, mudah untuk memeriksa masa linear sama ada mana-mana nombor dalam lebih daripada satu faktorisasi.


MackTuesday 06/13/2018.

Cari faktor utama setiap nombor. Nombor semua coprime berpasangan jika dan hanya jika setiap perdana dalam keseluruhan koleksi adalah berbeza. Cek ini boleh dilakukan dalam waktu O (n) menggunakan jadual hash.

Edit: Jawapan Draconis lebih baik walaupun, kerana ia tidak memerlukan pemfaktoran. Pengiraan GCD lebih cepat jika nombor anda besar dan / atau prima.

Related questions

Hot questions

Language

Popular Tags