Egy n természetes szám egész négyzetgyöke (isqrt) egy pozitív m szám , amely egyenlő azzal a legnagyobb egész számmal , amely kisebb vagy egyenlő n négyzetgyökével ,
Például mivel és .
A számítások egyik módja és a Newton-módszer használata az egyenlet megoldásának megtalálásához az iteratív képlet segítségével [1] [2]
A sorozat négyzetesen konvergál a [3] ponthoz . Bizonyítható, hogy ha kiinduló értéknek választjuk, azonnal meg lehet állni
,annak biztosítására
Nagyon nagy n egész számok kiszámításához mindkét osztási műveletben használhatja a hányados osztást maradékkal . Az előny az, hogy minden köztes értékhez csak egész számokat használunk, ami megszabadít a számok lebegőpontos számokként való ábrázolásától . Ez egyenértékű az iteratív képlet használatával
Az alapján, hogy
kimutatható, hogy a sorozat véges számú iterációval ér el [4] .
Ez azonban nem feltétlenül a fenti iteratív képlet fix pontja . Meg lehet mutatni, hogy mi lesz fix pont akkor és csak akkor, ha nem tökéletes négyzet. Ha tökéletes négyzet, akkor a sorozat nem konvergál, hanem egy kettes hosszúságú ciklusba megy, felváltva és . A működés leállításához elegendő ellenőrizni, hogy a sorozat konvergál-e (az előző érték ismétlése), vagy a következő érték pontosan eggyel nagyobb-e az aktuálisnál, ez utóbbi esetben az új értéket el kell vetni.
Ha *a szorzást <<jelenti, balra eltolást és >>jobbra logikai eltolást jelent, akkor a rekurzív algoritmus bármely természetes szám egész négyzetgyökének meghatározására a következő:
függvény integerSqrt(n): ha n < 0: hiba "integerSqrt csak nem negatív bemenettel működik" különben, ha n < 2: vissza n más: smallCandidate = integerSqrt(n >> 2) << 1 nagyJelölt = kicsiJelölt + 1 if largeCandidate*largeCandidate > n: return smallCandidate más: vissza nagyJelöltVagy iteráció rekurzió helyett:
függvény integerSqrt(n): ha n < 0: hiba "integerSqrt csak nem negatív bemenettel működik" # Keresse meg a legnagyobb eltolódást. műszak = 2 nShifted = n >> eltolás míg nShifted ≠ 0 és nShifted ≠ n: shift = shift + 2 nShifted = n >> eltolás műszak = váltás - 2 # Keresse meg az eredmény számjegyeit. eredmény = 0 miközben shift ≥ 0: eredmény = eredmény << 1 jelöltEredmény = eredmény + 1 ha jelöltEredmény*jelöltEredmény ≤ n >> műszak: eredmény = jelöltEredmény műszak = váltás - 2 vissza az eredménytBár a legtöbb érték esetében irracionális szám , a sorozat csak racionális tagokat tartalmaz, ha racionális. Így ezzel a módszerrel nem szükséges kilépni a racionális számok mezőjéből a kiszámításához , aminek van némi elméleti előnye.
Megmutatható, hogy melyik a legnagyobb szám a leállási kritériumhoz
,amely biztosítja, hogy a fenti algoritmusban.
Azokban az alkalmazásokban, amelyek nem racionális formátumokat használnak (például lebegőpontos), a leállítási állandót egynél kisebbre kell választani a kerekítési hibák elkerülése érdekében.
Számelméleti algoritmusok | |
---|---|
Egyszerűség tesztek | |
Prímszámok keresése | |
Faktorizáció | |
Diszkrét logaritmus | |
GCD keresése | |
Modulo aritmetika | |
Számok szorzása és osztása | |
A négyzetgyök kiszámítása |