Zistite, či sú dve čísla v Jave relatívne prime

1. Prehľad

Vzhľadom na dve celé čísla, a a b, hovoríme, že sú relatívne prvočíslo, ak jediný faktor, ktorý obidve rozdeľuje, je 1. Vzájomne prime alebo coprime sú synonymá pre relatívne prvočísla.

V tomto rýchlom návode si ukážeme riešenie tohto problému pomocou jazyka Java.

2. Najväčší algoritmus spoločného faktora

Ako sa ukazuje, ak je najväčší spoločný deliteľ (gcd) z 2 čísel a a b je 1 (t.j. gcd (a, b) = 1) potom a a b sú relatívne prime. Výsledkom je, že určenie, či sú dve čísla relatívne prvočíselné, spočíva jednoducho v zistení, či gcd je 1.

3. Implementácia euklidovského algoritmu

V tejto časti použijeme na výpočet Euklidovský algoritmus gcd z 2 čísel.

Predtým, ako ukážeme našu implementáciu, zhrňme si algoritmus a pozrime sa na rýchly príklad, ako ho v záujme pochopenia použiť.

Predstavte si teda, že máme dve celé čísla, a a b. Pri iteračnom prístupe najskôr rozdelíme a od b a získajte zvyšok. Ďalej priradíme a hodnota b, a my priradíme b zvyšná hodnota. Tento postup opakujeme až do b = 0. Nakoniec, keď dosiahneme tento bod, vrátime hodnotu a ako gcd výsledok, a ak a = 1, to môžeme povedať a a b sú relatívne prime.

Vyskúšajme to na dvoch celých číslach, a = 81 a b = 35.

V takom prípade zostáva zvyšok 81 a 35 (81 % 35) je 11. Takže v prvom iteračnom kroku končíme a = 35 a b = 11. Následne urobíme ďalšiu iteráciu.

Zvyšok 35 deleno 11 je 2. Výsledkom je, že teraz máme a = 11 (zamenili sme hodnoty) a b = 2. Pokračujme.

Výsledkom bude ešte jeden krok a = 2 a b = 1. Teraz sa blížime ku koncu.

Nakoniec sa dočkáme ešte jednej iterácie a = 1 a b = 0. Algoritmus sa vráti 1 a môžeme z toho vyvodiť záver 81 a 35 sú skutočne relatívne najlepšie.

3.1. Záväzná implementácia

Najskôr implementujme imperatívnu verziu Euklidovského algoritmu Java, ako je popísané vyššie:

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; } vrátiť a; } 

Ako si môžeme všimnúť, v prípade, že a je menej než b, pred pokračovaním zameníme hodnoty. Algoritmus sa zastaví, keď b je 0.

3.2. Rekurzívna implementácia

Ďalej sa pozrime na rekurzívnu implementáciu. Toto je pravdepodobne čistejšie, pretože sa vyhýba explicitným výmenám variabilných hodnôt:

int recursiveGCD (int a, int b) {if (b == 0) {return a; } if (a <b) {return recursiveGCD (b, a); } návratová rekurzívnaGCD (b, a% b); } 

4. Používanie BigIntegerImplementácia

Ale počkajte - nie je gcd algoritmus už implementovaný v Jave? Áno, je! The BigInteger trieda poskytuje a gcd metóda, ktorá implementuje euklidovský algoritmus na nájdenie najväčšieho spoločného deliteľa.

Pomocou tejto metódy môžeme ľahšie navrhnúť relatívne prime algoritmus ako:

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

5. Záver

V tomto rýchlom návode sme predstavili riešenie problému zistenia, či sú dve čísla relatívne prvočíselné, pomocou troch implementácií gcd algoritmus.

A ako vždy je vzorový kód k dispozícii na GitHub.


$config[zx-auto] not found$config[zx-overlay] not found