Apakah ada algoritma yang efisien untuk memeriksa apakah daftar bilangan bulat adalah koprime berpasangan, atau akankah algoritma yang lebih umum menjadi pilihan terbaik yang tersedia?
Apakah ada algoritma yang efisien untuk memeriksa apakah daftar bilangan bulat adalah koprime berpasangan, atau akankah algoritma yang lebih umum menjadi pilihan terbaik yang tersedia?
Jawaban:
Pertama, dua fakta tentang bilangan bulat koprime:
Ini mengikuti dari ini bahwa satu set bilangan bulat yang berbeda adalah pasangan berpasangan jika produknya sama dengan kelipatan paling tidak umum.
Anda dapat menghitung multiple yang paling tidak umum dengan menggunakan identitas berikut:
Dengan asumsi Anda punya angka dengan masing-masing digit, dan mengalikan / membagi / modding dua angka adalah (yang mungkin atau mungkin bukan asumsi yang baik tergantung pada model Anda), maka:
Dengan demikian, kompleksitas waktu dari keseluruhan algoritma adalah .
Iya. Pendekatan naif untuk memeriksa setiap pasangan angka membutuhkan waktu kuadratik, tetapi ada algoritma yang lebih efisien. Ada algoritma waktu yang hampir linier, dijelaskan dalam makalah berikut:
Daniel J. Bernstein. Anjak menjadi coprim pada dasarnya waktu linear . Jurnal Algoritma 54 (2005), 1--30.
Lihat juga https://cstheory.stackexchange.com/q/3393/5038 . Itu hampir seefisien yang mungkin Anda harapkan.
Untuk memperjelas bagaimana ini membantu situasi Anda, setelah Anda menemukan basis koprime dan memfaktorkan masing-masing elemen atas dasar, sepele untuk memeriksa apakah mereka adalah pasangan berpasangan: jika mereka bukan pasangan berpasangan, maka beberapa pasangan akan memiliki kesamaan faktor, dan itu akan menjadi faktor yang ada dalam basis coprime dan yang hadir dalam faktorisasi keduanya. Jika tidak ada faktor yang umum muncul dalam faktorisasi dua atau lebih angka, maka Anda tahu angka-angka tersebut adalah pasangan berpasangan. Setelah Anda memiliki faktorisasi, mudah untuk memeriksa dalam waktu linier apakah ada angka di lebih dari satu faktorisasi.
Factoring over a coprime base
hubungannya dengan checking if a list of integers is pairwise coprime
(belum).
Temukan faktor prima dari setiap angka. Angka-angka semua koprime berpasangan jika dan hanya jika setiap prime dalam seluruh koleksi berbeda. Pemeriksaan ini dapat dilakukan dalam waktu O (n) menggunakan tabel hash.
Sunting: Jawaban Draconis lebih baik, karena tidak memerlukan faktorisasi. Perhitungan GCD lebih cepat jika angka Anda besar dan / atau prima.