Pronađi jesu li dva broja relativno jednostavna u Javi
1. Pregled
S obzirom na dvije cjelobrojne vrijednosti, a i b, kažemo da jesu relativno prost ako je jedini čimbenik koji dijeli oboje 1. Međusobno prosti ili supstratni sinonimi su za relativno proste brojeve.
U ovom brzom vodiču proći ćemo kroz rješenje ovog problema pomoću Jave.
2. Najveći algoritam zajedničkog faktora
Kako se ispostavilo, ako je najveći zajednički djelitelj (gcd) od 2 broja a i b je 1 (tj. gcd (a, b) = 1) onda a i b relativno su primarni. Kao rezultat toga, utvrđivanje jesu li dva broja relativno prosta sastoji se samo od pronalaska da li gcd je 1.
3. Provedba euklidskog algoritma
U ovom ćemo odjeljku koristiti euklidski algoritam za izračunavanje gcd od 2 broja.
Prije nego što pokažemo svoju implementaciju, sažeti ćemo algoritam i pogledati brzi primjer kako ga primijeniti radi razumijevanja.
Dakle, zamislite da imamo dvije cijele brojeve, a i b. U iterativnom pristupu prvo dijelimo a po b i dobiti ostatak. Dalje, dodjeljujemo a vrijednost b, i mi dodjeljujemo b ostatak vrijednosti. Ponavljamo ovaj postupak do b = 0. Napokon, kad dosegnemo ovu točku, vraćamo vrijednost a kao gcd rezultat i ako a = 1, to možemo reći a i b relativno su primarni.
Isprobajmo na dvije cijele brojke, a = 81 i b = 35.
U ovom slučaju, ostatak od 81 i 35 (81 % 35) je 11. Dakle, u prvom iteracijskom koraku završavamo sa a = 35 i b = 11. Slijedom toga, napravit ćemo još jednu ponavljanje.
Ostatak od 35 podjeljeno sa 11 je 2. Kao rezultat, sada imamo a = 11 (zamijenili smo vrijednosti) i b = 2. Idemo dalje.
Još jedan korak rezultirat će a = 2 i b = 1. Sad se približavamo kraju.
Napokon, nakon još jedne ponavljanja, stići ćemo a = 1 i b = 0. Algoritam se vraća 1 i to možemo zaključiti 81 i 35 doista su relativno primarni.
3.1. Imperativna provedba
Prvo, implementirajmo imperativnu Java verziju euklidskog algoritma kako je gore opisano:
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; }
Kao što možemo primijetiti, u slučaju gdje a je manje od b, zamijenimo vrijednosti prije nastavka. Algoritam se zaustavlja kada b je 0.
3.2. Rekurzivna provedba
Dalje, pogledajmo rekurzivnu implementaciju. Ovo je vjerojatno čišće jer izbjegava eksplicitne zamjene vrijednosti varijabli:
int rekurzivnoGCD (int a, int b) {if (b == 0) {return a; } if (a <b) {return rekurzivnoGCD (b, a); } vratiti rekurzivniGCD (b, a% b); }
4. Korištenje BigInteger‘S Implementacija
Ali pričekajte - nije gcd algoritam već implementiran u Javi? Da je! The BigInteger razred pruža a gcd metoda koja provodi euklidski algoritam za pronalaženje najvećeg zajedničkog djelitelja.
Korištenjem ove metode možemo lakše izraditi relativno osnovni algoritam kao:
boolean bigIntegerRelativelyPrime (int a, int b) {return BigInteger.valueOf (a) .gcd (BigInteger.valueOf (b)). jednako (BigInteger.ONE); }
5. Zaključak
U ovom smo brzom vodiču predstavili rješenje problema pronalaženja jesu li dva broja relativno prosta koristeći tri implementacije gcd algoritam.
Kao i uvijek, uzorak koda dostupan je na GitHubu.