How to resolve the algorithm Pythagorean triples step by step in the Julia programming language
How to resolve the algorithm Pythagorean triples step by step in the Julia 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 Julia programming language
The provided Julia code, focuses on counting Pythagorean triplets within specified perimeter limits, specifically exploring both all possible and "primitive" triplets. Here's a detailed breakdown:
-
primitiven{T<:Integer}(m::T)
Function:- This function generates a vector of primitive Pythagorean triples with a given perimeter
m
. - A primitive triplet is one where the greatest common divisor (GCD) of the triplet's three sides is 1.
- The function starts by checking if
m
is greater than 1; if not, it returns an empty vector. - It then checks if
m
is equal to 2; if so, it returns a vector containing only the number 1. - If
m
is not prime, it generates a vector of all the primitive triplets with a perimeter ofm
. To do this, it creates a vector of boolean values,rp
, whererp[i]
istrue
ifi
is a primitive Pythagorean triple. - It then iterates through all the factors of
m
and setsrp[p:p:m-1]
tofalse
for each factorp
. This removes all the non-primitive triplets from the vector. - Finally, it returns a vector containing all the primitive Pythagorean triples with a perimeter of
m
.
- This function generates a vector of primitive Pythagorean triples with a given perimeter
-
pythagoreantripcount{T<:Integer}(plim::T)
Function:- This function counts the number of all Pythagorean triplets and primitive Pythagorean triplets within a specified perimeter limit
plim
. - It initializes two counters,
primcnt
andfullcnt
, to 0. - It then iterates through all possible values of
m
from 2 toplim
. - For each value of
m
, it calculates the corresponding value ofp
as2m^2
. - It then iterates through all the primitive Pythagorean triples with a perimeter of
m
using theprimitiven
function. - For each primitive Pythagorean triple, it calculates the corresponding value of
q
asp + 2m*n
. - It checks if
q
is less than or equal toplim
; if not, it breaks out of the loop. - It increments
primcnt
by 1 and incrementsfullcnt
by the number of timesq
can divideplim
. - Finally, it returns a tuple containing the values of
primcnt
andfullcnt
.
- This function counts the number of all Pythagorean triplets and primitive Pythagorean triplets within a specified perimeter limit
-
Main Body:
- The main body of the code prints a table showing the number of all Pythagorean triplets and primitive Pythagorean triplets within specified perimeter limits.
- It iterates through the values of
om
from 1 to 10. - For each value of
om
, it calculatesplim
as10^om
and calls thepythagoreantripcount
function to count the number of all Pythagorean triplets and primitive Pythagorean triplets within the specified perimeter limit. - It then prints the values of
om
,fcnt
, andpcnt
in a table.
Source code in the julia programming language
function primitiven{T<:Integer}(m::T)
1 < m || return T[]
m != 2 || return T[1]
!isprime(m) || return T[2:2:m-1]
rp = trues(m-1)
if isodd(m)
rp[1:2:m-1] = false
end
for p in keys(factor(m))
rp[p:p:m-1] = false
end
T[1:m-1][rp]
end
function pythagoreantripcount{T<:Integer}(plim::T)
primcnt = 0
fullcnt = 0
11 < plim || return (primcnt, fullcnt)
for m in 2:plim
p = 2m^2
p+2m <= plim || break
for n in primitiven(m)
q = p + 2m*n
q <= plim || break
primcnt += 1
fullcnt += div(plim, q)
end
end
return (primcnt, fullcnt)
end
println("Counting Pythagorian Triplets within perimeter limits:")
println(" Limit All Primitive")
for om in 1:10
(pcnt, fcnt) = pythagoreantripcount(10^om)
println(@sprintf " 10^%02d %11d %9d" om fcnt pcnt)
end
You may also check:How to resolve the algorithm Test integerness step by step in the COBOL programming language
You may also check:How to resolve the algorithm Inverted syntax step by step in the ALGOL 68 programming language
You may also check:How to resolve the algorithm Compare length of two strings step by step in the FutureBasic programming language
You may also check:How to resolve the algorithm Increment a numerical string step by step in the Pop11 programming language
You may also check:How to resolve the algorithm Strip a set of characters from a string step by step in the PureBasic programming language