\

A binary tree of all Pythagorean triples

181 points - 11/21/2024

Source
  • sevensor

    11/21/2024

    This is wonderful! I’d somehow missed the classical enumeration of Pythagorean triples. I learned them as magic numbers. That structure alone is worth the price of admission.

    • keithalewis

      11/22/2024

      There are Pythagorean triples (a, b, c) for which there do not exist integers m, n with a = m^2 - n^2, b = 2mn, c = m^2 + n^2.

        • tromp

          11/22/2024

          But all such triples are non-primitive. I.e. they are of the form (ka, kb, kc) with k>1. So all Pythagorean triples can be generated as a scaled primitive triple (a,b,c) that is generated by Euclid's formula from m,n.

          • FredrikMeyer

            11/22/2024

            Learned something new today. For other interested: https://en.wikipedia.org/wiki/Pythagorean_triple#Generating_...

        • dpunjabi24

          11/22/2024

          Beautiful. Thanks for sharing.

          • matt3210

            11/21/2024

            Very nice! nit: website isn’t mobile friendly

            • lollobomb

              11/21/2024

              Wow, this is extremely cool! Only problem, the JS slows my Firefox almost to freezing, is it normal?

                • hakmem

                  11/21/2024

                  Yes, this is normal. I am sorry, I am working on a more efficient implementation.

                  The JavaScript of this page does a lot of number crunching.

                  It is actually doing arithmetic on the Stern-Brocot tree. It is all written in ClojureScript and not really optimized yet. I mention in the paper that I do not even use TCO.

                  Anyway, thank you - and all the people here - for the kind words! I am so happy that my article was so well received today.

                    • akomtu

                      11/21/2024

                      A simple trick to solve nearly all freezing problems: move the computations to a background thread, aka Worker in JS terms.

                • 11/21/2024

              • not2b

                11/21/2024

                You changed the article's title to an incorrect one. The tree of primitive Pythagorean triples is ternary, not binary. Each node has three children.

                  • feoren

                    11/21/2024

                    Keep reading. The Barning-Hall tree is ternary, but this article is mostly devoted to the Stern-Brocot tree, which is binary.

                    • generationP

                      11/21/2024

                      Both conventions are valid. You call it binary when you view it as a rooted tree, or ternary if you view it just as a graph.

                        • nyrikki

                          11/21/2024

                          But it _all_ triples?

                          > I sketch how the stereographic projection of the Stern–Brocot tree forms an ordered binary tree of Pythagorean triples, which can be used to compute best approximations of turn angles of points on the circle and finally trigonometric functions

                          The permutation and stack problem in the page seem to indicate this is a potential method for approximations, but insufficient for _all_

                          That said I am reading this on mobile and may have missed something.

                            • not2b

                              11/21/2024

                              The ternary tree contains all primitive triples (where the GCD of the terms is 1), where a<b<c. So it contains (3,4,5) but not (6,8,10) or (4,3,5).

                                • nyrikki

                                  11/21/2024

                                  Yes, but the binary projection does not according to the link.

                                  345 and 435 would require two binary trees.

                                    • AnotherGoodName

                                      11/21/2024

                                      I think skipping transposed values is fine though. You could just mirror the output at 45degrees for that if you wanted it. It does hit all distinct triples including the multiples of triples so it’s more inclusive of everything than the ternary tree.

                                      • hakmem

                                        11/21/2024

                                        You can see both triples are contained in one binary tree using the big diagram in section 3. The triple [3 4 5] has the "path" RR. The triple [4 3 5] the path R.

                        • ColinWright

                          11/21/2024

                          From the article:

                          "I sketch how the stereographic projection of the Stern–Brocot tree forms an ordered binary tree of Pythagorean triples ..."

                          ... and ...

                          "Before that, I briefly recapitulate the classical enumeration of Pythagorean triples and the ternary Barning–Hall tree."

                          So this article is about the binary tree representation.