I am a teacher!

导航

习题解析之:完美立方数

【问题描述】

费马大定理断言,当整数 n > 2时,关于 a,b,c 的方程an = bn + cn 没有正整数解。 该定理被提出来后,历经三百多年,经历多人猜想辩证,最终在 1995 年被英国数学家安德鲁.怀尔斯证明。
不过,可以找到大于 1 的 4 个整数满足完美立方等式:
a3 = b3 + c3 + d3

(例如 123= 63 + 8+ 103)
编写一个程序,对于任意给定的正整数 N(N<=100),寻找所有的四元组(a,b,c,d),满足
a3 = b3 + c3 + d3  (其中 1 < a,b,c,d <=N)

输入格式‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬
整数 N(1 < N <= 100)

输出格式‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬
按照 a 的值从小到大,每行输出一个完美立方等式,其中b,c,d按照非降序排列输出。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

(若两个完美立方式中 a 值相同,则 b 值小的先输出;在 b 值相等的情况下,c 值小的先输出,在 b,c 都相等的情况下,d 值小的先输出。)

示例‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬
输入:
24
输出:
Cube = 6,Triple = (3,4,5)
Cube = 12,Triple = (6,8,10)
Cube = 18,Triple = (2,12,16)
Cube = 18,Triple = (9,12,15)
Cube = 19,Triple = (3,10,18)
Cube = 20,Triple = (7,14,17)
Cube = 24,Triple = (12,16,20)‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

【编程思路】

        用 4 重循环对 a、b、c、d的取值组合进行穷举。

        其中,3 <= a <= n,2 <= b < a,b <= c < a,c <= d < a。这样穷举可以保证 b,c,d按照非降序排列输出。

        由于题目中涉及计算整数 x 的立方,为简化计算,先用推导式 ls = [x ** 3 for x in range(n + 1)] 创建一个列表 ls,其中 ls[i]元素值就是 i 的立方。
        这样,穷举时,要判断a3 = b3 + c3 + d3,只需转换为查表,即 ls[a] == ls[b] + ls[c] + ls[d]。

        编写的源程序如下:

         image

posted on 2025-11-28 14:44  aTeacher  阅读(0)  评论(0)    收藏  举报