Searching for perfect squares is best done by squaring the next integer. The first 1000 perfect squares are *: >: i.1000 No factorial number is a perfect square because it includes a non-square factors.
On Sunday, May 17, 2020, 09:08:15 p.m. EDT, Skip Cave <[email protected]> wrote: Roger, I don't understand your last post. I'm trying to find a way to search for perfect squares. For smaller integers the plan is easy. 1. Generate a list of integers (eg. 1 to 30): ]n=.>:i.30 2. Take the square root of each one (%:) %:n 1 1.4142 1.7321 2 2.2361 2.4495 2.6458 2.8284 3 3.1623 3.3166 3.4641 3.6056 3.7417 3.873 4 4.1231 4.2426 4.3589 4.4721 4.5826 4.6904 4.7958 4.899 5 5.099 5.1962 5.2915 5.3852 5.4772 3. Find and mark the square roots of n that are integers (=>.) (=>.)%:n 1 0 0 1 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 4. Use the marks to select the integers in n that are perfect squares (n#~): n#~(=>.)%:n 1 4 9 16 25 So we are able to find the perfect squares in the range 1 to 30. Now I want to find the perfect squares in the range of factorial 1 to 30: Actually I know that factorials of integers *can't* have square roots (except !1), but I want to check. See https://bit.ly/3fXevkr So we generate the factorials of the integers 1 to 30 and store them in n: ]n=.!>:i.30x 1 2 6 24 120 720 5040 40320 362880 3628800 39916800 479001600 6227020800 87178291200 1307674368000 20922789888000 355687428096000 6402373705728000 121645100408832000 2432902008176640000 51090942171709440000 1124000727777607680000 25852016738884976640000 620448401733239439360000 15511210043330985984000000 403291461126605635584000000 10888869450418352160768000000 304888344611713860501504000000 8841761993739701954543616000000 265252859812191058636308480000000 Now take the square roots of those 30 factorials, then find & mark any of the square roots that are integers. We know that only the first square root (%:!1) should be an integer, since 1 is a perfect square. all the square roots of the other factorials should not be integers, as they are not perfect squares. (=>.)%:n 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 Uh oh! J is telling me that factorials of the last 5 integers (n=.26 27 28 29 30) are perfect squares! This is clearly not true. Roger showed this in his response to me, but he didn't propose a solution. How can I take the square root of large integers such as !26 27 28 29 30 in J, and get an accurate floating point or rational number? Skip Cave On Sun, May 17, 2020 at 4:18 PM Roger Hui <[email protected]> wrote: > 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 > ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm
