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

Content added Content deleted
Line 3,173: Line 3,173:
2651730845859653471779023381601
2651730845859653471779023381601
7015820362023593956150476655802</pre>
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.

*/

/* 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, 2),
if 0 <= t then (
z : t,
r : r + q
)
),
r
) $

for i : 0 thru 65 do (display (isqrt (i))) $
for i : 1 thru 73 step 2 do (display (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,2),
if 0 <= t then (z:t,r:r+q)),r)
(%i4) for i from 0 thru 65 do display(isqrt(i))
isqrt(0) = 0

isqrt(1) = 1

isqrt(2) = 1

isqrt(3) = 1

isqrt(4) = 2

isqrt(5) = 2

isqrt(6) = 2

isqrt(7) = 2

isqrt(8) = 2

isqrt(9) = 3

isqrt(10) = 3

isqrt(11) = 3

isqrt(12) = 3

isqrt(13) = 3

isqrt(14) = 3

isqrt(15) = 3

isqrt(16) = 4

isqrt(17) = 4

isqrt(18) = 4

isqrt(19) = 4

isqrt(20) = 4

isqrt(21) = 4

isqrt(22) = 4

isqrt(23) = 4

isqrt(24) = 4

isqrt(25) = 5

isqrt(26) = 5

isqrt(27) = 5

isqrt(28) = 5

isqrt(29) = 5

isqrt(30) = 5

isqrt(31) = 5

isqrt(32) = 5

isqrt(33) = 5

isqrt(34) = 5

isqrt(35) = 5

isqrt(36) = 6

isqrt(37) = 6

isqrt(38) = 6

isqrt(39) = 6

isqrt(40) = 6

isqrt(41) = 6

isqrt(42) = 6

isqrt(43) = 6

isqrt(44) = 6

isqrt(45) = 6

isqrt(46) = 6

isqrt(47) = 6

isqrt(48) = 6

isqrt(49) = 7

isqrt(50) = 7

isqrt(51) = 7

isqrt(52) = 7

isqrt(53) = 7

isqrt(54) = 7

isqrt(55) = 7

isqrt(56) = 7

isqrt(57) = 7

isqrt(58) = 7

isqrt(59) = 7

isqrt(60) = 7

isqrt(61) = 7

isqrt(62) = 7

isqrt(63) = 7

isqrt(64) = 8

isqrt(65) = 8

(%i5) for i step 2 thru 73 do display(7^i,isqrt(7^i))
1
7 = 7

isqrt(7) = 2

3
7 = 343

isqrt(343) = 18

5
7 = 16807

isqrt(16807) = 129

7
7 = 823543

isqrt(823543) = 907

9
7 = 40353607

isqrt(40353607) = 6352

11
7 = 1977326743

isqrt(1977326743) = 44467

13
7 = 96889010407

isqrt(96889010407) = 311269

15
7 = 4747561509943

isqrt(4747561509943) = 2178889

17
7 = 232630513987207

isqrt(232630513987207) = 15252229

19
7 = 11398895185373143

isqrt(11398895185373143) = 106765608

21
7 = 558545864083284007

isqrt(558545864083284007) = 747359260

23
7 = 27368747340080916343

isqrt(27368747340080916343) = 5231514822

25
7 = 1341068619663964900807

isqrt(1341068619663964900807) = 36620603758

27
7 = 65712362363534280139543

isqrt(65712362363534280139543) = 256344226312

29
7 = 3219905755813179726837607

isqrt(3219905755813179726837607) = 1794409584184

31
7 = 157775382034845806615042743

isqrt(157775382034845806615042743) = 12560867089291

33
7 = 7730993719707444524137094407

isqrt(7730993719707444524137094407) = 87926069625040

35
7 = 378818692265664781682717625943

isqrt(378818692265664781682717625943) = 615482487375282

37
7 = 18562115921017574302453163671207

isqrt(18562115921017574302453163671207) = 4308377411626977

39
7 = 909543680129861140820205019889143

isqrt(909543680129861140820205019889143) = 30158641881388842

41
7 = 44567640326363195900190045974568007

isqrt(44567640326363195900190045974568007) = 211110493169721897

43
7 = 2183814375991796599109312252753832343

isqrt(2183814375991796599109312252753832343) = 1477773452188053281

45
7 = 107006904423598033356356300384937784807

isqrt(107006904423598033356356300384937784807) = 10344414165316372973

47
7 = 5243338316756303634461458718861951455543

isqrt(5243338316756303634461458718861951455543) = 72410899157214610812

49
7 = 256923577521058878088611477224235621321607

isqrt(256923577521058878088611477224235621321607) = 506876294100502275687

51
7 = 12589255298531885026341962383987545444758743

isqrt(12589255298531885026341962383987545444758743) = 3548134058703515929815

53
7 = 616873509628062366290756156815389726793178407

isqrt(616873509628062366290756156815389726793178407) = 24836938410924611508707

55
7 = 30226801971775055948247051683954096612865741943

isqrt(30226801971775055948247051683954096612865741943) =
173858568876472280560953

57
7 = 1481113296616977741464105532513750734030421355207

isqrt(1481113296616977741464105532513750734030421355207) =
1217009982135305963926677

59
7 = 72574551534231909331741171093173785967490646405143

isqrt(72574551534231909331741171093173785967490646405143) =
8519069874947141747486745

61
7 = 3556153025177363557255317383565515512407041673852007

isqrt(3556153025177363557255317383565515512407041673852007) =
59633489124629992232407216

63
7 = 174251498233690814305510551794710260107945042018748343

isqrt(174251498233690814305510551794710260107945042018748343) =
417434423872409945626850517

65
7 = 8538323413450849900970017037940802745289307058918668807

isqrt(8538323413450849900970017037940802745289307058918668807) =
2922040967106869619387953625

67
7 = 418377847259091645147530834859099334519176045887014771543

isqrt(418377847259091645147530834859099334519176045887014771543) =
20454286769748087335715675381

69
7 = 20500514515695490612229010908095867391439626248463723805607

isqrt(20500514515695490612229010908095867391439626248463723805607) =
143180007388236611350009727669

71
7 = 1004525211269079039999221534496697502180541686174722466474743

isqrt(1004525211269079039999221534496697502180541686174722466474743) =
1002260051717656279450068093686

73
7 = 49221735352184872959961855190338177606846542622561400857262407

isqrt(49221735352184872959961855190338177606846542622561400857262407) =
7015820362023593956150476655802

(%o6) /home/trashman/src/chemoelectric/rosettacode-contributions/isqrt.mac</pre>


=={{header|Mercury}}==
=={{header|Mercury}}==