So you wanted to talk about double prime factors, saying
“a number is a perfect square iff it is a perfect square”


Am 18.05.20 um 03:56 schrieb 'Pascal Jasmin' via Programming:
  q: 729
3 3 3 3 3 3



__ q: 729

3
6

a perfect square will have __&q: return even numbers for the 2nd row.



On Sunday, May 17, 2020, 09:32:04 p.m. EDT, Hauke Rehr <[email protected]> 
wrote:





First, Skip already mentioned that. His posts are about J’s behaviour.
Second, your reasoning is flawed.
*/ 3 ^ i.4 includes non-square factors and is a perfect square.
Think about prime numbers and their distribution,
and you’ll get a valid answer.

Am 18.05.20 um 03:22 schrieb 'Pascal Jasmin' via Programming:
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



--
----------------------
mail written using NEO
neo-layout.org

----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to