How to resolve the algorithm Taxicab numbers step by step in the Julia programming language
How to resolve the algorithm Taxicab numbers step by step in the Julia programming language
Table of Contents
Problem Statement
A taxicab number (the definition that is being used here) is a positive integer that can be expressed as the sum of two positive cubes in more than one way.
The first taxicab number is 1729, which is:
Taxicab numbers are also known as:
Let's start with the solution:
Step by Step solution about How to resolve the algorithm Taxicab numbers step by step in the Julia programming language
The provided Julia code finds and prints taxi cab numbers up to a specified limit. Taxi cab numbers are positive integers that can be expressed as the sum of two cubes in two different ways. The code achieves this efficiently using dictionaries and sorting algorithms.
Detailed Explanation:
-
Function
findtaxinumbers
:- Input:
nmax
- The upper limit for finding taxi cab numbers. - Creates dictionaries
cube2n
andsum2cubes
to optimize calculations.
- Input:
-
Creating
cube2n
Dictionary:- This dictionary maps each cube value (x^3) to the original number x.
-
Creating
sum2cubes
Dictionary:- This dictionary stores sets of number pairs that sum up to each possible sum of two cubes.
-
Populating
sum2cubes
and Finding Taxi Cab Numbers:- Iterates over all possible pairs of cube values, calculating their sum (c1 + c2).
- For each sum c, checks if it already exists in
sum2cubes
. - If not, creates a new set. If it does, adds the pair (cube2n[c1], cube2n[c2]) to the existing set.
-
Collecting and Sorting Taxi Cab Numbers:
- Collects all entries from
sum2cubes
that have more than one pair. - Sorts these taxi cab numbers by their cube sum.
- Collects all entries from
-
Printing Taxi Cab Numbers:
- Prints the first 25 and last 6 taxi cab numbers up to
nmax
along with their cube representations.
- Prints the first 25 and last 6 taxi cab numbers up to
-
Alternative
findtaxinumbers
Function:- This version uses a different approach to find taxi cab numbers, improving efficiency.
- Creates
cubes
andcrev
dictionaries for storing cubes and their corresponding numbers. - Iterates over the cubes and sums of cubes, checking if a given sum can be expressed as the sum of two different cubes. If so, prints the result.
Additional Notes:
- The code uses
Dict
andSet
data structures from theDataStructures
package for efficient storage and manipulation. - It utilizes
IterTools.product
for iterating over all possible pairs of dictionary entries. - The
@printf
macro is used for formatted printing.
Source code in the julia programming language
using Printf, DataStructures, IterTools
function findtaxinumbers(nmax::Integer)
cube2n = Dict{Int,Int}(x ^ 3 => x for x in 0:nmax)
sum2cubes = DefaultDict{Int,Set{NTuple{2,Int}}}(Set{NTuple{2,Int}})
for ((c1, _), (c2, _)) in product(cube2n, cube2n)
if c1 ≥ c2
push!(sum2cubes[c1 + c2], (cube2n[c1], cube2n[c2]))
end
end
taxied = collect((k, v) for (k, v) in sum2cubes if length(v) ≥ 2)
return sort!(taxied, by = first)
end
taxied = findtaxinumbers(1200)
for (ith, (cube, set)) in zip(1:25, taxied[1:25])
@printf "%2i: %7i = %s\n" ith cube join(set, ", ")
# println(ith, ": ", cube, " = ", join(set, ", "))
end
println("...")
for (ith, (cube, set)) in zip(2000:2006, taxied[2000:2006])
@printf "%-4i: %i = %s\n" ith cube join(set, ", ")
end
# version 2
function findtaxinumbers(nmax::Integer)
cubes, crev = collect(x ^ 3 for x in 1:nmax), Dict{Int,Int}()
for (x, x3) in enumerate(cubes)
crev[x3] = x
end
sums = collect(x + y for x in cubes for y in cubes if y < x)
sort!(sums)
idx = 0
for i in 2:(endof(sums) - 1)
if sums[i-1] != sums[i] && sums[i] == sums[i+1]
idx += 1
if 25 < idx < 2000 || idx > 2006 continue end
n, p = sums[i], NTuple{2,Int}[]
for x in cubes
n < 2x && break
if haskey(crev, n - x)
push!(p, (crev[x], crev[n - x]))
end
end
@printf "%4d: %10d" idx n
for x in p @printf(" = %4d ^ 3 + %4d ^ 3", x...) end
println()
end
end
end
findtaxinumbers(1200)
You may also check:How to resolve the algorithm Averages/Pythagorean means step by step in the AppleScript programming language
You may also check:How to resolve the algorithm Euler's identity step by step in the R programming language
You may also check:How to resolve the algorithm Sum to 100 step by step in the Picat programming language
You may also check:How to resolve the algorithm Terminal control/Unicode output step by step in the Scala programming language
You may also check:How to resolve the algorithm Sum of squares step by step in the Excel programming language