Jump to content

Isqrt (integer square root) of X: Difference between revisions

→‎{{header|Haskell}}: added solution
(→‎{{header|Haskell}}: added solution)
Line 1,564:
73 49,221,735,352,184,872,959,961,855,190,338,177,606,846,542,622,561,400,857,262,407 7,015,820,362,023,593,956,150,476,655,802
</pre>
 
=={{header|Haskell}}==
 
<lang haskell>import Data.Bits
 
isqrt :: Integer -> Integer
isqrt n = go n 0 (q `shiftR` 2)
where
q = head $ dropWhile (< n) $ iterate (`shiftL` 2) 1
go z r 0 = r
go z r q = let t = z - r - q
in if t >= 0
then go t (r `shiftR` 1 + q) (q `shiftR` 2)
else go z (r `shiftR` 1) (q `shiftR` 2)
 
main = do
print $ isqrt <$> [1..65]
mapM_ print $ zip [1,3..73] (isqrt <$> iterate (49 *) 7)</lang>
 
<pre>*Main> main
[0,1,1,1,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,8]
(1,2)
(3,18)
(5,129)
(7,907)
(9,6352)
(11,44467)
(13,311269)
(15,2178889)
(17,15252229)
(19,106765608)
(21,747359260)
(23,5231514822)
(25,36620603758)
(27,256344226312)
(29,1794409584184)
(31,12560867089291)
(33,87926069625040)
(35,615482487375282)
(37,4308377411626977)
(39,30158641881388842)
(41,211110493169721897)
(43,1477773452188053281)
(45,10344414165316372973)
(47,72410899157214610812)
(49,506876294100502275687)
(51,3548134058703515929815)
(53,24836938410924611508707)
(55,173858568876472280560953)
(57,1217009982135305963926677)
(59,8519069874947141747486745)
(61,59633489124629992232407216)
(63,417434423872409945626850517)
(65,2922040967106869619387953625)
(67,20454286769748087335715675381)
(69,143180007388236611350009727669)
(71,1002260051717656279450068093686)
(73,7015820362023593956150476655802)</pre>
 
=={{header|Java}}==
Anonymous user
Cookies help us deliver our services. By using our services, you agree to our use of cookies.