找到第一个n出租车号码。给定一个值n。我想找到前n个出租车号码。出租车是可以以多种方式表示为两个完美立方体之和的数字。
n
(请注意,存在两个 相关但不同的 集合,称为“出租车编号”:以 超过1种 方式的2个立方 ****的 总和,和以 n 方式2个正整数的立方的总和的最小数。这个问题是关于前一组,因为后一组仅知道前六个成员)
例如:
1^3 + 12^3 = 1729 = 9^3 + 10^3
我想对算法或如何解决该问题的C代码片段进行粗略的概述。
The first five of these are: I J K L Number --------------------------------- 1 12 9 10 1729 2 16 9 15 4104 2 24 18 20 13832 10 27 19 24 20683 4 32 18 30 32832
我想出了可以通过这种方式获得答案:
#include<stdio.h> int main() { int n, i, count=0, j, k, int_count; printf("Enter the number of values needed: "); scanf("%d", &n); i = 1; while(count < n) { int_count = 0; 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++; } } if(int_count == 2) { count++; printf("\nGot %d Hardy-Ramanujan numbers %d", count, i); } i++; } }
既然a^3+b^3 = n,a应该小于n^(1/3)。
a^3+b^3 = n
a
n^(1/3)