25 lines
904 B
Plaintext
25 lines
904 B
Plaintext
/* Function that returns a pythagorean triple from two parameters */
|
|
pythag(u,v):=[u^2-v^2,2*u*v,u^2+v^2]$
|
|
|
|
/* Predicate function to check for primitivity */
|
|
primitivep(lst):=if lreduce('gcd,lst)=1 then true$
|
|
|
|
/* Function that returns perimeter */
|
|
perim(lst):=apply("+",lst)$
|
|
|
|
/* Function to return a list of triples by parameter u */
|
|
/* Parameter v is controlled to be lesser or equal than u, and when equal are deleted */
|
|
param_pythag(n):=block(
|
|
create_list(lambda([x,y],pythag(x,y) and x#y)(i,j),i,1,n,j,1,i),
|
|
delete(false,%%))$
|
|
|
|
/* Test case */
|
|
/* With the function param_pythag as it is some non primitive triples are missing, but not the primitives */
|
|
sublist(param_pythag(6),lambda([x],primitivep(x) and perim(x)<=100));
|
|
|
|
|
|
/* The number of triples, primitive or not, can be recovered from the primitives */
|
|
block(
|
|
apply(append,makelist(%*i,i,1,8)),
|
|
sublist(%%,lambda([x],perim(x)<=100)));
|