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

Line 3,173:
2651730845859653471779023381601
7015820362023593956150476655802</pre>
 
=={{header|Maxima}}==
 
<lang maxima>/* -*- Maxima -*- */
 
/*
 
The Rosetta Code integer square root task, in Maxima.
 
I have not tried to make the output conform quite to the task
description, because Maxima is not a general purpose programming
language. Perhaps someone else will care to do it.
 
I *do* check that the Rosetta Code routine gives the same results as
the built-in routine.
 
*/
 
/* pow4gtx -- find a power of 4 greater than x. */
pow4gtx (x) := block (
[q],
q : 1, while q <= x do q : bit_lsh (q, 2),
q
) $
 
/* rosetta_code_isqrt -- find the integer square root. */
rosetta_code_isqrt (x) := block (
[q, z, r, t],
q : pow4gtx (x),
z : x,
r : 0,
while 1 < q do (
q : bit_rsh (q, 2),
t : z - r - q,
r : bit_rsh (r, 1),
if 0 <= t then (
z : t,
r : r + q
)
),
r
) $
 
for i : 0 thru 65 do (
display (rosetta_code_isqrt (i),
is (equal (rosetta_code_isqrt (i), isqrt (i))))
) $
for i : 1 thru 73 step 2 do (
display (7**i, rosetta_code_isqrt (7**i),
is (equal (rosetta_code_isqrt (7**i), isqrt (7**i))))
) $</lang>
 
{{out}}
<pre style="height:30em;overflow:auto">$ maxima -q -b isqrt.mac
(%i1) batch("isqrt.mac")
 
read and interpret /home/trashman/src/chemoelectric/rosettacode-contributions/isqrt.mac
(%i2) pow4gtx(x):=block([q],q:1,while q <= x do q:bit_lsh(q,2),q)
(%i3) rosetta_code_isqrt(x):=block([q,z,r,t],q:pow4gtx(x),z:x,r:0,
while 1 < q do
(q:bit_rsh(q,2),t:z-r-q,r:bit_rsh(r,1),
if 0 <= t then (z:t,r:r+q)),r)
(%i4) for i from 0 thru 65 do
display(rosetta_code_isqrt(i),
is(equal(rosetta_code_isqrt(i),isqrt(i))))
rosetta_code_isqrt(0) = 0
 
is(equal(rosetta_code_isqrt(i), isqrt(i))) = true
 
rosetta_code_isqrt(1) = 1
 
is(equal(rosetta_code_isqrt(i), isqrt(i))) = true
 
rosetta_code_isqrt(2) = 1
 
is(equal(rosetta_code_isqrt(i), isqrt(i))) = true
 
rosetta_code_isqrt(3) = 1
 
is(equal(rosetta_code_isqrt(i), isqrt(i))) = true
 
rosetta_code_isqrt(4) = 2
 
is(equal(rosetta_code_isqrt(i), isqrt(i))) = true
 
rosetta_code_isqrt(5) = 2
 
is(equal(rosetta_code_isqrt(i), isqrt(i))) = true
 
rosetta_code_isqrt(6) = 2
 
is(equal(rosetta_code_isqrt(i), isqrt(i))) = true
 
rosetta_code_isqrt(7) = 2
 
is(equal(rosetta_code_isqrt(i), isqrt(i))) = true
 
rosetta_code_isqrt(8) = 2
 
is(equal(rosetta_code_isqrt(i), isqrt(i))) = true
 
rosetta_code_isqrt(9) = 3
 
is(equal(rosetta_code_isqrt(i), isqrt(i))) = true
 
rosetta_code_isqrt(10) = 3
 
is(equal(rosetta_code_isqrt(i), isqrt(i))) = true
 
rosetta_code_isqrt(11) = 3
 
is(equal(rosetta_code_isqrt(i), isqrt(i))) = true
 
rosetta_code_isqrt(12) = 3
 
is(equal(rosetta_code_isqrt(i), isqrt(i))) = true
 
rosetta_code_isqrt(13) = 3
 
is(equal(rosetta_code_isqrt(i), isqrt(i))) = true
 
rosetta_code_isqrt(14) = 3
 
is(equal(rosetta_code_isqrt(i), isqrt(i))) = true
 
rosetta_code_isqrt(15) = 3
 
is(equal(rosetta_code_isqrt(i), isqrt(i))) = true
 
rosetta_code_isqrt(16) = 4
 
is(equal(rosetta_code_isqrt(i), isqrt(i))) = true
 
rosetta_code_isqrt(17) = 4
 
is(equal(rosetta_code_isqrt(i), isqrt(i))) = true
 
rosetta_code_isqrt(18) = 4
 
is(equal(rosetta_code_isqrt(i), isqrt(i))) = true
 
rosetta_code_isqrt(19) = 4
 
is(equal(rosetta_code_isqrt(i), isqrt(i))) = true
 
rosetta_code_isqrt(20) = 4
 
is(equal(rosetta_code_isqrt(i), isqrt(i))) = true
 
rosetta_code_isqrt(21) = 4
 
is(equal(rosetta_code_isqrt(i), isqrt(i))) = true
 
rosetta_code_isqrt(22) = 4
 
is(equal(rosetta_code_isqrt(i), isqrt(i))) = true
 
rosetta_code_isqrt(23) = 4
 
is(equal(rosetta_code_isqrt(i), isqrt(i))) = true
 
rosetta_code_isqrt(24) = 4
 
is(equal(rosetta_code_isqrt(i), isqrt(i))) = true
 
rosetta_code_isqrt(25) = 5
 
is(equal(rosetta_code_isqrt(i), isqrt(i))) = true
 
rosetta_code_isqrt(26) = 5
 
is(equal(rosetta_code_isqrt(i), isqrt(i))) = true
 
rosetta_code_isqrt(27) = 5
 
is(equal(rosetta_code_isqrt(i), isqrt(i))) = true
 
rosetta_code_isqrt(28) = 5
 
is(equal(rosetta_code_isqrt(i), isqrt(i))) = true
 
rosetta_code_isqrt(29) = 5
 
is(equal(rosetta_code_isqrt(i), isqrt(i))) = true
 
rosetta_code_isqrt(30) = 5
 
is(equal(rosetta_code_isqrt(i), isqrt(i))) = true
 
rosetta_code_isqrt(31) = 5
 
is(equal(rosetta_code_isqrt(i), isqrt(i))) = true
 
rosetta_code_isqrt(32) = 5
 
is(equal(rosetta_code_isqrt(i), isqrt(i))) = true
 
rosetta_code_isqrt(33) = 5
 
is(equal(rosetta_code_isqrt(i), isqrt(i))) = true
 
rosetta_code_isqrt(34) = 5
 
is(equal(rosetta_code_isqrt(i), isqrt(i))) = true
 
rosetta_code_isqrt(35) = 5
 
is(equal(rosetta_code_isqrt(i), isqrt(i))) = true
 
rosetta_code_isqrt(36) = 6
 
is(equal(rosetta_code_isqrt(i), isqrt(i))) = true
 
rosetta_code_isqrt(37) = 6
 
is(equal(rosetta_code_isqrt(i), isqrt(i))) = true
 
rosetta_code_isqrt(38) = 6
 
is(equal(rosetta_code_isqrt(i), isqrt(i))) = true
 
rosetta_code_isqrt(39) = 6
 
is(equal(rosetta_code_isqrt(i), isqrt(i))) = true
 
rosetta_code_isqrt(40) = 6
 
is(equal(rosetta_code_isqrt(i), isqrt(i))) = true
 
rosetta_code_isqrt(41) = 6
 
is(equal(rosetta_code_isqrt(i), isqrt(i))) = true
 
rosetta_code_isqrt(42) = 6
 
is(equal(rosetta_code_isqrt(i), isqrt(i))) = true
 
rosetta_code_isqrt(43) = 6
 
is(equal(rosetta_code_isqrt(i), isqrt(i))) = true
 
rosetta_code_isqrt(44) = 6
 
is(equal(rosetta_code_isqrt(i), isqrt(i))) = true
 
rosetta_code_isqrt(45) = 6
 
is(equal(rosetta_code_isqrt(i), isqrt(i))) = true
 
rosetta_code_isqrt(46) = 6
 
is(equal(rosetta_code_isqrt(i), isqrt(i))) = true
 
rosetta_code_isqrt(47) = 6
 
is(equal(rosetta_code_isqrt(i), isqrt(i))) = true
 
rosetta_code_isqrt(48) = 6
 
is(equal(rosetta_code_isqrt(i), isqrt(i))) = true
 
rosetta_code_isqrt(49) = 7
 
is(equal(rosetta_code_isqrt(i), isqrt(i))) = true
 
rosetta_code_isqrt(50) = 7
 
is(equal(rosetta_code_isqrt(i), isqrt(i))) = true
 
rosetta_code_isqrt(51) = 7
 
is(equal(rosetta_code_isqrt(i), isqrt(i))) = true
 
rosetta_code_isqrt(52) = 7
 
is(equal(rosetta_code_isqrt(i), isqrt(i))) = true
 
rosetta_code_isqrt(53) = 7
 
is(equal(rosetta_code_isqrt(i), isqrt(i))) = true
 
rosetta_code_isqrt(54) = 7
 
is(equal(rosetta_code_isqrt(i), isqrt(i))) = true
 
rosetta_code_isqrt(55) = 7
 
is(equal(rosetta_code_isqrt(i), isqrt(i))) = true
 
rosetta_code_isqrt(56) = 7
 
is(equal(rosetta_code_isqrt(i), isqrt(i))) = true
 
rosetta_code_isqrt(57) = 7
 
is(equal(rosetta_code_isqrt(i), isqrt(i))) = true
 
rosetta_code_isqrt(58) = 7
 
is(equal(rosetta_code_isqrt(i), isqrt(i))) = true
 
rosetta_code_isqrt(59) = 7
 
is(equal(rosetta_code_isqrt(i), isqrt(i))) = true
 
rosetta_code_isqrt(60) = 7
 
is(equal(rosetta_code_isqrt(i), isqrt(i))) = true
 
rosetta_code_isqrt(61) = 7
 
is(equal(rosetta_code_isqrt(i), isqrt(i))) = true
 
rosetta_code_isqrt(62) = 7
 
is(equal(rosetta_code_isqrt(i), isqrt(i))) = true
 
rosetta_code_isqrt(63) = 7
 
is(equal(rosetta_code_isqrt(i), isqrt(i))) = true
 
rosetta_code_isqrt(64) = 8
 
is(equal(rosetta_code_isqrt(i), isqrt(i))) = true
 
rosetta_code_isqrt(65) = 8
 
is(equal(rosetta_code_isqrt(i), isqrt(i))) = true
 
(%i5) for i step 2 thru 73 do
display(7^i,rosetta_code_isqrt(7^i),
is(equal(rosetta_code_isqrt(7^i),isqrt(7^i))))
1
7 = 7
 
rosetta_code_isqrt(7) = 2
 
i i
is(equal(rosetta_code_isqrt(7 ), isqrt(7 ))) = true
 
3
7 = 343
 
rosetta_code_isqrt(343) = 18
 
i i
is(equal(rosetta_code_isqrt(7 ), isqrt(7 ))) = true
 
5
7 = 16807
 
rosetta_code_isqrt(16807) = 129
 
i i
is(equal(rosetta_code_isqrt(7 ), isqrt(7 ))) = true
 
7
7 = 823543
 
rosetta_code_isqrt(823543) = 907
 
i i
is(equal(rosetta_code_isqrt(7 ), isqrt(7 ))) = true
 
9
7 = 40353607
 
rosetta_code_isqrt(40353607) = 6352
 
i i
is(equal(rosetta_code_isqrt(7 ), isqrt(7 ))) = true
 
11
7 = 1977326743
 
rosetta_code_isqrt(1977326743) = 44467
 
i i
is(equal(rosetta_code_isqrt(7 ), isqrt(7 ))) = true
 
13
7 = 96889010407
 
rosetta_code_isqrt(96889010407) = 311269
 
i i
is(equal(rosetta_code_isqrt(7 ), isqrt(7 ))) = true
 
15
7 = 4747561509943
 
rosetta_code_isqrt(4747561509943) = 2178889
 
i i
is(equal(rosetta_code_isqrt(7 ), isqrt(7 ))) = true
 
17
7 = 232630513987207
 
rosetta_code_isqrt(232630513987207) = 15252229
 
i i
is(equal(rosetta_code_isqrt(7 ), isqrt(7 ))) = true
 
19
7 = 11398895185373143
 
rosetta_code_isqrt(11398895185373143) = 106765608
 
i i
is(equal(rosetta_code_isqrt(7 ), isqrt(7 ))) = true
 
21
7 = 558545864083284007
 
rosetta_code_isqrt(558545864083284007) = 747359260
 
i i
is(equal(rosetta_code_isqrt(7 ), isqrt(7 ))) = true
 
23
7 = 27368747340080916343
 
rosetta_code_isqrt(27368747340080916343) = 5231514822
 
i i
is(equal(rosetta_code_isqrt(7 ), isqrt(7 ))) = true
 
25
7 = 1341068619663964900807
 
rosetta_code_isqrt(1341068619663964900807) = 36620603758
 
i i
is(equal(rosetta_code_isqrt(7 ), isqrt(7 ))) = true
 
27
7 = 65712362363534280139543
 
rosetta_code_isqrt(65712362363534280139543) = 256344226312
 
i i
is(equal(rosetta_code_isqrt(7 ), isqrt(7 ))) = true
 
29
7 = 3219905755813179726837607
 
rosetta_code_isqrt(3219905755813179726837607) = 1794409584184
 
i i
is(equal(rosetta_code_isqrt(7 ), isqrt(7 ))) = true
 
31
7 = 157775382034845806615042743
 
rosetta_code_isqrt(157775382034845806615042743) = 12560867089291
 
i i
is(equal(rosetta_code_isqrt(7 ), isqrt(7 ))) = true
 
33
7 = 7730993719707444524137094407
 
rosetta_code_isqrt(7730993719707444524137094407) = 87926069625040
 
i i
is(equal(rosetta_code_isqrt(7 ), isqrt(7 ))) = true
 
35
7 = 378818692265664781682717625943
 
rosetta_code_isqrt(378818692265664781682717625943) = 615482487375282
 
i i
is(equal(rosetta_code_isqrt(7 ), isqrt(7 ))) = true
 
37
7 = 18562115921017574302453163671207
 
rosetta_code_isqrt(18562115921017574302453163671207) = 4308377411626977
 
i i
is(equal(rosetta_code_isqrt(7 ), isqrt(7 ))) = true
 
39
7 = 909543680129861140820205019889143
 
rosetta_code_isqrt(909543680129861140820205019889143) = 30158641881388842
 
i i
is(equal(rosetta_code_isqrt(7 ), isqrt(7 ))) = true
 
41
7 = 44567640326363195900190045974568007
 
rosetta_code_isqrt(44567640326363195900190045974568007) = 211110493169721897
 
i i
is(equal(rosetta_code_isqrt(7 ), isqrt(7 ))) = true
 
43
7 = 2183814375991796599109312252753832343
 
rosetta_code_isqrt(2183814375991796599109312252753832343) = 1477773452188053281
 
i i
is(equal(rosetta_code_isqrt(7 ), isqrt(7 ))) = true
 
45
7 = 107006904423598033356356300384937784807
 
rosetta_code_isqrt(107006904423598033356356300384937784807) =
10344414165316372973
 
i i
is(equal(rosetta_code_isqrt(7 ), isqrt(7 ))) = true
 
47
7 = 5243338316756303634461458718861951455543
 
rosetta_code_isqrt(5243338316756303634461458718861951455543) =
72410899157214610812
 
i i
is(equal(rosetta_code_isqrt(7 ), isqrt(7 ))) = true
 
49
7 = 256923577521058878088611477224235621321607
 
rosetta_code_isqrt(256923577521058878088611477224235621321607) =
506876294100502275687
 
i i
is(equal(rosetta_code_isqrt(7 ), isqrt(7 ))) = true
 
51
7 = 12589255298531885026341962383987545444758743
 
rosetta_code_isqrt(12589255298531885026341962383987545444758743) =
3548134058703515929815
 
i i
is(equal(rosetta_code_isqrt(7 ), isqrt(7 ))) = true
 
53
7 = 616873509628062366290756156815389726793178407
 
rosetta_code_isqrt(616873509628062366290756156815389726793178407) =
24836938410924611508707
 
i i
is(equal(rosetta_code_isqrt(7 ), isqrt(7 ))) = true
 
55
7 = 30226801971775055948247051683954096612865741943
 
rosetta_code_isqrt(30226801971775055948247051683954096612865741943) =
173858568876472280560953
 
i i
is(equal(rosetta_code_isqrt(7 ), isqrt(7 ))) = true
 
57
7 = 1481113296616977741464105532513750734030421355207
 
rosetta_code_isqrt(1481113296616977741464105532513750734030421355207) =
1217009982135305963926677
 
i i
is(equal(rosetta_code_isqrt(7 ), isqrt(7 ))) = true
 
59
7 = 72574551534231909331741171093173785967490646405143
 
rosetta_code_isqrt(72574551534231909331741171093173785967490646405143) =
8519069874947141747486745
 
i i
is(equal(rosetta_code_isqrt(7 ), isqrt(7 ))) = true
 
61
7 = 3556153025177363557255317383565515512407041673852007
 
rosetta_code_isqrt(3556153025177363557255317383565515512407041673852007) =
59633489124629992232407216
 
i i
is(equal(rosetta_code_isqrt(7 ), isqrt(7 ))) = true
 
63
7 = 174251498233690814305510551794710260107945042018748343
 
rosetta_code_isqrt(174251498233690814305510551794710260107945042018748343) =
417434423872409945626850517
 
i i
is(equal(rosetta_code_isqrt(7 ), isqrt(7 ))) = true
 
65
7 = 8538323413450849900970017037940802745289307058918668807
 
rosetta_code_isqrt(8538323413450849900970017037940802745289307058918668807) =
2922040967106869619387953625
 
i i
is(equal(rosetta_code_isqrt(7 ), isqrt(7 ))) = true
 
67
7 = 418377847259091645147530834859099334519176045887014771543
 
rosetta_code_isqrt(418377847259091645147530834859099334519176045887014771543
) = 20454286769748087335715675381
 
i i
is(equal(rosetta_code_isqrt(7 ), isqrt(7 ))) = true
 
69
7 = 20500514515695490612229010908095867391439626248463723805607
 
rosetta_code_isqrt(20500514515695490612229010908095867391439626248463723805607
) = 143180007388236611350009727669
 
i i
is(equal(rosetta_code_isqrt(7 ), isqrt(7 ))) = true
 
71
7 = 1004525211269079039999221534496697502180541686174722466474743
 
rosetta_code_isqrt(10045252112690790399992215344966975021805416861747224664747\
43) = 1002260051717656279450068093686
 
i i
is(equal(rosetta_code_isqrt(7 ), isqrt(7 ))) = true
 
73
7 = 49221735352184872959961855190338177606846542622561400857262407
 
rosetta_code_isqrt(49221735352184872959961855190338177606846542622561400857262\
407) = 7015820362023593956150476655802
 
i i
is(equal(rosetta_code_isqrt(7 ), isqrt(7 ))) = true
 
(%o6) /home/trashman/src/chemoelectric/rosettacode-contributions/isqrt.mac</pre>
 
 
 
 
=={{header|Mercury}}==
1,448

edits