How to resolve the algorithm Pythagorean triples step by step in the Bracmat programming language

Published on 12 May 2024 09:40 PM

How to resolve the algorithm Pythagorean triples step by step in the Bracmat programming language

Table of Contents

Problem Statement

A Pythagorean triple is defined as three positive integers

( a , b , c )

{\displaystyle (a,b,c)}

where

a < b < c

{\displaystyle a<b<c}

, and

a

2

b

2

=

c

2

.

{\displaystyle a^{2}+b^{2}=c^{2}.}

They are called primitive triples if

a , b , c

{\displaystyle a,b,c}

are co-prime, that is, if their pairwise greatest common divisors

g c d

( a , b )

g c d

( a , c )

g c d

( b , c )

1

{\displaystyle {\rm {gcd}}(a,b)={\rm {gcd}}(a,c)={\rm {gcd}}(b,c)=1}

. Because of their relationship through the Pythagorean theorem, a, b, and c are co-prime if a and b are co-prime (

g c d

( a , b )

1

{\displaystyle {\rm {gcd}}(a,b)=1}

).   Each triple forms the length of the sides of a right triangle, whose perimeter is

P

a + b + c

{\displaystyle P=a+b+c}

.

The task is to determine how many Pythagorean triples there are with a perimeter no larger than 100 and the number of these that are primitive.

Deal with large values.   Can your program handle a maximum perimeter of 1,000,000?   What about 10,000,000?   100,000,000? Note: the extra credit is not for you to demonstrate how fast your language is compared to others;   you need a proper algorithm to solve them in a timely manner.

Let's start with the solution:

Step by Step solution about How to resolve the algorithm Pythagorean triples step by step in the Bracmat programming language

Source code in the bracmat programming language

(pythagoreanTriples=
  total prim max-peri U
.       (.(1,-2,2) (2,-1,2) (2,-2,3))
        (.(1,2,2) (2,1,2) (2,2,3))
        (.(-1,2,2) (-2,1,2) (-2,2,3))
    : ?U
  & ( new-tri
    =     i t p Urows Urow Ucols
        , a b c loop A B C
      .     !arg:(,?a,?b,?c)
          & !a+!b+!c:~>!max-peri:?p
          & 1+!prim:?prim
          & div$(!max-peri.!p)+!total:?total
          & !U:?Urows
          & ( loop
            =   !Urows:(.?Urow) ?Urows
              & !Urow:?Ucols
              & :?t
              &   whl
                ' ( !Ucols:(?A,?B,?C) ?Ucols
                  & (!t,!a*!A+!b*!B+!c*!C):?t
                  )
              & new-tri$!t
              & !loop
            )
          & !loop
        |
    )
  & ( Main
    =   seed
      .   (,3,4,5):?seed
        & 10:?max-peri
        &   whl
          ' ( 0:?total:?prim
            & new-tri$!seed
            &   out
              $ ( str
                $ ( "Up to "
                    !max-peri
                    ": "
                    !total
                    " triples, "
                    !prim
                    " primitives."
                  )
                )
            & !max-peri*10:~>10000000:?max-peri
            )
    )
  & Main$
);
      
pythagoreanTriples$;

(pythagoreanTriples=
  total prim max-peri U stack
.       (.(1,-2,2) (2,-1,2) (2,-2,3))
        (.(1,2,2) (2,1,2) (2,2,3))
        (.(-1,2,2) (-2,1,2) (-2,2,3))
    : ?U
  & ( new-tri
    =     i t p Urows Urow Ucols Ucol
        , a b c loop A B C
      .     !arg:(,?a,?b,?c)
          & !a+!b+!c:~>!max-peri:?p
          & 1+!prim:?prim
          & div$(!max-peri.!p)+!total:?total
          & !U:?Urows
          & ( loop
            =   !Urows:(.?Urow) ?Urows
              & !Urow:?Ucols
              & :?t
              &   whl
                ' ( !Ucols:(?A,?B,?C) ?Ucols
                  & (!t,!a*!A+!b*!B+!c*!C):?t
                  )
              & !t !stack:?stack
              & !loop
            )
          & !loop
        |
    )
  & ( Main
    =   seed
      .   10:?max-peri
        &   whl
          ' ( 0:?total:?prim
            & (,3,4,5):?stack
            &   whl
              ' (!stack:%?seed ?stack&new-tri$!seed)
            &   out
              $ ( str
                $ ( "Up to "
                    !max-peri
                    ": "
                    !total
                    " triples, "
                    !prim
                    " primitives."
                  )
                )
            & !max-peri*10:~>100000000:?max-peri
            )
    )
  & Main$
);

pythagoreanTriples$;

  

You may also check:How to resolve the algorithm Loops/Do-while step by step in the Ruby programming language
You may also check:How to resolve the algorithm Knuth shuffle step by step in the Inform 6 programming language
You may also check:How to resolve the algorithm Roman numerals/Encode step by step in the ActionScript programming language
You may also check:How to resolve the algorithm Bernstein basis polynomials step by step in the ObjectIcon programming language
You may also check:How to resolve the algorithm Almost prime step by step in the COBOL programming language