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?
algorithms
primes
pengguna2782067
sumber
sumber
Jawaban:
Pertama, dua fakta tentang bilangan bulat koprime:
Ini mengikuti dari ini bahwa satu set bilangan bulat yang berbeda{a,b,⋯z} 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 punyan angka dengan k masing-masing digit, dan mengalikan / membagi / modding dua angka adalah O(1) (yang mungkin atau mungkin bukan asumsi yang baik tergantung pada model Anda), maka:
Dengan demikian, kompleksitas waktu dari keseluruhan algoritma adalahO(nk) .
sumber
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.
sumber
Factoring over a coprime base
hubungannya denganchecking 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.
sumber