Use <.@%: s=: <.@%: !26x s 20082117944245 s*s 403291461126567024928620025 !26x 403291461126605635584000000
On Sun, May 17, 2020 at 2:00 PM Skip Cave <[email protected]> wrote: > We can find perfect squares in a list by taking the square root (%:) of a > number, and checking to see if it is an integer: > > * n#~(=>.)%:n=.>:i.30* > > *1 4 9 16 25* > > > Now we can try larger integers by taking the square root of the factorial > of some small integers: > > * n#~(=>.)%:!n=.>:i.30* > > *1 26 27 28 29 30* > > > Hmm. This says that !26 and up, are perfect squares. > > * !26x* > > *403291461126605635584000000* > > * %:!26x* > > *20082117944246* > > > Well it looks like %:!26x is an integer, making !26x a perfect square. > Let's check: > > * 20082117944246x^2* > > *403291461126607189164508516* > > * !26x* > > *403291461126605635584000000* > > > * (!26x)-:20082117944246x^2 * > *0* > Clearly, !26x is not a perfect square. > > Looks like J has precision issues with the square root of large extended > integers. How can I fix this, to find accurate square roots of large > integers? > > Skip Cave > ---------------------------------------------------------------------- > For information about J forums see http://www.jsoftware.com/forums.htm > ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm
