学校里的算法练习
看到有篇文章介绍了一个数学天才--拉马努金,有一次他和大数学家哈代乘坐一辆出租车,他俩谈到出租车的号码时,哈代说:“号码1729,对我来说相当单调,但愿它不是一个不幸的兆头”。拉马努金立刻回答:“不,那是个有趣得很的数。可以用两个立方之和来表达而且有两种表达方式的数之中,1729是最小的。”
因为1729 = 1**3+12**3 = 9**3 + 10**3。
这样的数后来被称作“的士数”,而1729是其中最小的。
求解出所有小于10000的“的士数 https://fishc.com.cn/forum.php?mod=viewthread&tid=105640
这里有人问过了
不过看着好复杂。。。。。。。。计算出来的和百度百科上说的也不一样 疾风怪盗 发表于 2020-9-19 19:22
https://fishc.com.cn/forum.php?mod=viewthread&tid=105640
这里有人问过了
不过看着好复杂。。。。。。 ...
楼主给出的“的士数”定义有问题,正确的应该是第n个的士数为最小的数能以n个不同的方法表示成两个正立方数之和。 永恒的蓝色梦想 发表于 2020-9-19 19:33
楼主给出的“的士数”定义有问题,正确的应该是
太复杂了,溜了溜了。。。。。。
过几天再来看最佳答案。。。。。。 不过我这个更难些,和那个不一样的 本帖最后由 风过无痕1989 于 2020-9-19 20:33 编辑
Python 语言我不会,我用 C 语言写了一个,得出 10000 以内只有两个数符合条件,它们是:1729 和 4104。
1729 = 1**3 + 12**3 = 9**3 + 10**3
4104 = 2**3 + 16**3 = 9**3 + 15**3
不过,这个程序重复的太多,请大神们帮我修改一下条件:
#include <stdio.h>
int main()
{
int i,j,k,n,num1 = 0,num2 = 0;
for (i = 1;i < 22;i++)
{
for(j = 1;j < 22;j++)
{
if(i != j)
num1 = i * i * i + j * j * j;
for (k = 1;k < 22;k++)
{
for (n = 1;n < 22;n++)
{
if(k != i && k != j && k != n && n != i && n != j)
num2 = k * k * k + n * n * n;
if(num1 == num2 && k != i && k != j && k != n && n != i && n != j)
printf("%d%d%d%d%d\n",i,j,k,n,num1);
}
num2 = 0;
}
num2 = 0;
}
}
}
本帖最后由 疾风怪盗 于 2020-9-20 21:10 编辑
最后修改下:
def isTexiNumber(n):
a = int(pow(n, 1 / 3) + 0.5)
num = []
for i in range(1, a+1):
for j in range(i, a+1):
if pow(i, 3) + pow(j, 3) == n:
num.append((i, j))
return num
n = 0
num_one=[]
num_two=[]
while n < 10000:
num = isTexiNumber(n)
if len(num)==1:
num_one.append(num)
elif len(num) == 2:
num_two.append(num)
n += 1
if len(num_one)>0:
n1=pow(num_one,3)+pow(num_one,3)
print(f'第一的士数为:{n1}')
print(f'\t{n1} = {num_one}**3 + {num_one}**3')
if len(num_two)>0:
n2=pow(num_two,3)+pow(num_two,3)
print(f'第二的士数为:{n2}')
print(f'\t{n2} = {num_two}**3 + {num_two}**3')
print(f'\t{n2} = {num_two}**3 + {num_two}**3')
疾风怪盗 发表于 2020-9-19 20:32
按照之前帖子上写的,改了一下
第1个:1**3 + 12**3 = 1729
谢谢,你这个挺靠近正确答案的。题目意思是写出第一个和第二个的士数,就是2和1729,不过还是很感谢 风过无痕1989 发表于 2020-9-19 20:29
Python 语言我不会,我用 C 语言写了一个,得出 10000 以内只有两个数符合条件,它们是:1729 和 4104。
1 ...
万分感谢,我连写都没写出来,谢谢了 疾风怪盗 发表于 2020-9-19 20:32
按照之前帖子上写的,改了一下
第1个:1**3 + 12**3 = 1729
大佬能再帮我改改吗,改成“第一的士数为2
第二的士数为1729”,谢谢您了。 ‘林夕’ 发表于 2020-9-19 23:04
大佬能再帮我改改吗,改成“第一的士数为2
第二的士数为1729 ...
你说的2是什么,1万以内:第一个为1729,第二个为4104
n = 0
count=0
count_ch=['一','二','三','四']
while n<10000:
num=isTexiNumber(n)
if len(num)>1:
print(f'第{count_ch}的士数为:{n}')
for i in num:
print(f'\t{n} = {i}**3 + {i}**3')
count +=1
n +=1
第一的士数为:1729
1729 = 1**3 + 12**3
1729 = 9**3 + 10**3
第二的士数为:4104
4104 = 2**3 + 16**3
4104 = 9**3 + 15**3
输出效果你自己改改啊。。。。。。。{:10_284:} 1 疾风怪盗 发表于 2020-9-19 23:13
你说的2是什么,1万以内:第一个为1729,第二个为4104
第一的士数为:1729
这不是我刚学python嘛,大佬教教我,https://baike.so.com/doc/6807863-7024814.html这介链接就是说的士数的,1万以内第一个士数为2,第二个为1729 疾风怪盗 发表于 2020-9-19 23:13
你说的2是什么,1万以内:第一个为1729,第二个为4104
第一的士数为:1729
大佬,一的三次方加上一的三次方是2啊 ‘林夕’ 发表于 2020-9-20 10:48
大佬,一的三次方加上一的三次方是2啊
然后呢?的士数的题意,要两个等式,你要让2是的士数,1**3+1**3,那还需要一个等式也等于2才行
用两个立方之和来表达而且有两种表达方式的数之中 疾风怪盗 发表于 2020-9-20 10:56
然后呢?的士数的题意,要两个等式,你要让2是的士数,1**3+1**3,那还需要一个等式也等于2才行
用两 ...
所以说“2”是第一的士数,它就一种表达方式
而1729是第二的士数,最小的第二的士数 ‘林夕’ 发表于 2020-9-20 17:13
所以说“2”是第一的士数,它就一种表达方式
而1729是第二的士数,最小的第二的士数
{:10_284:}
我到现在才明白一点。。。。。
怪不得百度百科上写得怎么不一样
第一的士数就是一个表达式
第二的士数就是二个表达式
第三的士数就是三个表达式
。。。。。。。。。。
好难理解的数学。。。。。 ‘林夕’ 发表于 2020-9-20 17:13
所以说“2”是第一的士数,它就一种表达方式
而1729是第二的士数,最小的第二的士数
改成这样试试
def isTexiNumber(n):
a = int(pow(n, 1 / 3) + 0.5)
num = []
for i in range(1, a+1):
for j in range(i, a+1):
if pow(i, 3) + pow(j, 3) == n:
num.append((i, j))
return num
n = 0
num_one=[]
num_two=[]
while n < 10000:
num = isTexiNumber(n)
if len(num)==1:
num_one.append(num)
elif len(num) == 2:
num_two.append(num)
n += 1
if len(num_one)>0:
n1=pow(num_one,3)+pow(num_one,3)
print(f'第一的士数为:{n1}')
print(f'\t{n1} = {num_one}**3 + {num_one}**3')
if len(num_two)>0:
n2=pow(num_two,3)+pow(num_two,3)
print(f'第二的士数为:{n2}')
print(f'\t{n2} = {num_two}**3 + {num_two}**3')
print(f'\t{n2} = {num_two}**3 + {num_two}**3') 疾风怪盗 发表于 2020-9-20 17:21
我到现在才明白一点。。。。。
怪不得百度百科上写得怎么不一样
第一的士数就是一个表达式 ...
我也是这么觉得,太难了,看了一个小时才懂 疾风怪盗 发表于 2020-9-20 17:45
改成这样试试
非常感谢,这次对了,谢谢大佬{:10_257:}
页:
[1]