Cari Jika Dua Nombor Relatif Perdana di Jawa

1. Gambaran keseluruhan

Diberi dua bilangan bulat, a dan b , kita mengatakan bahawa mereka relatif prima jika satu-satunya faktor yang membagi kedua-duanya adalah 1. Saling perdana atau coprime adalah sinonim untuk nombor yang relatif prima.

Dalam tutorial ringkas ini, kita akan mencari jalan keluar untuk mengatasi masalah ini menggunakan Java.

2. Algoritma Faktor Biasa Terbesar

Ternyata, jika pembahagi umum yang paling besar ( gcd ) dari 2 nombor a dan b adalah 1 (iaitu gcd (a, b) = 1 ) maka a dan b relatif prima. Akibatnya, menentukan sama ada dua nombor relatif prima hanya dengan mencari apakah gcd adalah 1.

3. Pelaksanaan Algoritma Euclidean

Pada bahagian ini, kita akan menggunakan algoritma Euclidean untuk mengira gcd 2 nombor.

Sebelum kita menunjukkan pelaksanaannya, mari kita meringkaskan algoritma dan melihat contoh ringkas bagaimana menerapkannya demi pemahaman.

Jadi, bayangkan kita mempunyai dua bilangan bulat, a dan b . Dalam pendekatan berulang, pertama kita membahagikan a dengan b dan mendapatkan selebihnya. Seterusnya, kami memberikan satu nilai b , dan kami memberikan b nilai bakinya. Kami mengulangi proses ini sehingga b = 0 . Akhirnya, apabila kita mencapai titik ini, kita mengembalikan nilai a sebagai hasil gcd , dan jika a = 1 , kita dapat mengatakan bahawa a dan b relatif prima.

Mari mencubanya pada dua integer, a = 81 dan b = 35 .

Dalam kes ini, selebihnya 81 dan 35 (81% 35) adalah 11 . Jadi, pada langkah lelaran pertama, kita diakhiri dengan a = 35 dan b = 11 . Oleh itu, kami akan melakukan lelaran lain.

Selebihnya dari 35 dibahagi dengan 11 adalah 2 . Hasilnya, kita sekarang mempunyai a = 11 (kita menukar nilai) dan b = 2 . Mari teruskan.

Satu langkah lagi akan menghasilkan a = 2 dan b = 1 . Sekarang, kita semakin hampir.

Terakhir, setelah satu lagi lelaran, kita akan mencapai a = 1 dan b = 0 . Algoritma mengembalikan 1 dan kita dapat menyimpulkan bahawa 81 dan 35 sememangnya relatif prima.

3.1. Pelaksanaan Imperatif

Pertama, mari kita laksanakan algoritma Euclidean versi Java yang mustahak seperti yang dijelaskan di atas:

int iterativeGCD(int a, int b) { int tmp; while (b != 0) { if (a < b) { tmp = a; a = b; b = tmp; } tmp = b; b = a % b; a = tmp; } return a; } 

Seperti yang dapat kita perhatikan, dalam keadaan a kurang dari b , kita menukar nilai sebelum melanjutkan. Algoritma berhenti apabila b adalah 0.

3.2. Pelaksanaan berulang

Seterusnya, mari kita lihat pelaksanaan rekursif. Ini mungkin lebih bersih kerana mengelakkan pertukaran nilai pemboleh ubah yang jelas:

int recursiveGCD(int a, int b) { if (b == 0) { return a; } if (a < b) { return recursiveGCD(b, a); } return recursiveGCD(b, a % b); } 

4. Menggunakan Pelaksanaan BigInteger

Tetapi tunggu - bukankah algoritma gcd sudah dilaksanakan di Java? Ya betul! The BigInteger kelas menyediakan gcd kaedah yang melaksanakan algoritma Euclid untuk mencari pembahagi sepunya terbesar.

Dengan menggunakan kaedah ini, kita dapat merancang algoritma yang lebih utama dengan lebih mudah seperti:

boolean bigIntegerRelativelyPrime(int a, int b) { return BigInteger.valueOf(a).gcd(BigInteger.valueOf(b)).equals(BigInteger.ONE); } 

5. Kesimpulan

Dalam tutorial ringkas ini, kami telah memberikan penyelesaian untuk masalah mencari apakah dua nombor relatif prima menggunakan tiga implementasi algoritma gcd .

Dan, seperti biasa, contoh kod tersedia di GitHub.