The nth Taxicab number Taxicab(n), also called the n-th Hardy-Ramanujan number, is defined as the smallest number that can be expressed as a sum of two positive cube numbers in n distinct ways.
The most famous taxicab number is 1729 = Taxicab(2) = (1 ^ 3) + (12 ^ 3) = (9 ^ 3) + (10 ^ 3).
Given a number N, print first N Taxicab(2) numbers.
Examples:
Input: N = 1
Output: 1729
Explanation: 1729 = (1 ^ 3) + (12 ^ 3)
= (9 ^ 3) + (10 ^ 3)
Input: N = 2
Output: 1729 4104
Explanation: 1729 = (1 ^ 3) + (12 ^ 3)
= (9 ^ 3) + (10 ^ 3)
4104 = (16 ^ 3) + (2 ^ 3)
= (15 ^ 3) + (9 ^ 3)
We try all numbers one by one and check if it is a taxicab number. To check if a number is Taxicab, we use two nested loops:
In outer loop, we calculate cube root of a number.
In inner loop, we check if there is a cube-root that yield the result.
C++
// C++ implementation to print first N Taxicab(2)
// numbers :
#include<bits/stdc++.h>
using namespace std;
void printTaxicab2(int N)
{
// Starting from 1, check every number if
// it is Taxicab until count reaches N.
int i = 1, count = 0;
while (count < N)
{
int int_count = 0;
// Try all possible pairs (j, k) whose cube
// sums can be i.
for (int j = 1; j <= pow(i, 1.0/3); j++)
for (int k = j + 1; k <= pow(i, 1.0/3); k++)
if (j*j*j + k*k*k == i)
int_count++;
// Taxicab(2) found
if (int_count == 2)
{
count++;
cout << count << " " << i << endl;
}
i++;
}
}
// Driver code
int main()
{
int N = 5;
printTaxicab2(N);
return 0;
}
Java
// JAVA Code for Taxicab Numbers
import java.util.*;
class GFG {
public static void printTaxicab2(int N)
{
// Starting from 1, check every number if
// it is Taxicab until count reaches N.
int i = 1, count = 0;
while (count < N)
{
int int_count = 0;
// Try all possible pairs (j, k) whose
// cube sums can be i.
for (int j = 1; j <= Math.pow(i, 1.0/3); j++)
for (int k = j + 1; k <= Math.pow(i, 1.0/3);
k++)
if (j * j * j + k * k * k == i)
int_count++;
// Taxicab(2) found
if (int_count == 2)
{
count++;
System.out.println(count + " " + i);
}
i++;
}
}
/* Driver program to test above function */
public static void main(String[] args)
{
int N = 5;
printTaxicab2(N);
}
}
// This code is contributed by Arnav Kr. Mandal.
Python3
# Python3 implementation to print
# first N Taxicab(2) numbers
import math
def printTaxicab2(N):
# Starting from 1, check every number if
# it is Taxicab until count reaches N.
i, count = 1, 0
while (count < N):
int_count = 0
# Try all possible pairs (j, k)
# whose cube sums can be i.
for j in range(1, math.ceil(\
pow(i, 1.0 / 3)) + 1):
for k in range(j + 1,\
math.ceil(pow(i, 1.0 / 3)) + 1):
if (j * j * j + k * k * k == i):
int_count += 1
# Taxicab(2) found
if (int_count == 2):
count += 1
print(count, " ", i)
i += 1
# Driver code
N = 5
printTaxicab2(N)
# This code is contributed by Anant Agarwal.
C#
// C# Code for Taxicab Numbers
using System;
class GFG {
public static void printTaxicab2(int N)
{
// Starting from 1, check every number if
// it is Taxicab until count reaches N.
int i = 1, count = 0;
while (count < N)
{
int int_count = 0;
// Try all possible pairs (j, k) whose
// cube sums can be i.
for (int j = 1; j <= Math.Pow(i, 1.0/3); j++)
for (int k = j + 1; k <= Math.Pow(i, 1.0/3);
k++)
if (j * j * j + k * k * k == i)
int_count++;
// Taxicab(2) found
if (int_count == 2)
{
count++;
Console.WriteLine(count + " " + i);
}
i++;
}
}
// Driver program
public static void Main()
{
int N = 5;
printTaxicab2(N);
}
}
// This code is contributed by vt_m.
PHP
<?php
// PHP implementation to print first
// N Taxicab(2) numbers :
function printTaxicab2($N)
{
// Starting from 1, check every
// number if it is Taxicab until
// count reaches N.
$i = 1; $count = 0;
while ($count < $N)
{
$int_count = 0;
// Try all possible pairs (j, k)
// whose cube sums can be i.
for ($j = 1; $j <= pow($i, 1.0/3); $j++)
for ( $k = $j + 1; $k <= pow($i, 1.0/3); $k++)
if ($j * $j * $j + $k * $k * $k == $i)
$int_count++;
// Taxicab(2) found
if ($int_count == 2)
{
$count++;
echo $count, " ", $i, "\n";
}
$i++;
}
}
// Driver code
$N = 5;
printTaxicab2($N);
// This code is contributed by ajit.
?>
JavaScript
<script>
// Javascript implementation to print first
// N Taxicab(2) numbers :
function printTaxicab2(N)
{
// Starting from 1, check every
// number if it is Taxicab until
// count reaches N.
let i = 1; count = 0;
while (count < N)
{
let int_count = 0;
// Try all possible pairs (j, k)
// whose cube sums can be i.
for (let j = 1; j <= Math.pow(i, 1.0/3); j++)
for (let k = j + 1; k <= Math.pow(i, 1.0/3); k++)
if (j * j * j + k * k * k == i)
int_count++;
// Taxicab(2) found
if (int_count == 2)
{
count++;
document.write(count + " " + i + "<br>");
}
i++;
}
}
// Driver code
let N = 5;
printTaxicab2(N);
// This code is contributed by _saurabh_jaiswal.
</script>
Output1 1729
2 4104
3 13832
4 20683
5 32832
Time Complexity: O(i^(5/3)) were i is the last number checked for being a Taxicab number. Basically time complexity in this is output sensitive.
Auxiliary Space: O(1)
Explore
DSA Fundamentals
Data Structures
Algorithms
Advanced
Interview Preparation
Practice Problem