Run ID:160673
提交时间:2026-09-26 09:58:07
def find_perfect_cubes(N): # 预计算立方数,索引 i 对应 i 的立方 # 为了方便,数组大小设为 N+1,索引从 0 到 N cubes = [i**3 for i in range(N + 1)] found = False # 遍历 a,从 2 到 N # 注意:题目要求 a,b,c,d > 1,即 >= 2 # 且 b <= c <= d < a for a in range(2, N + 1): a_cube = cubes[a] # 遍历 b,从 2 到 a-1 for b in range(2, a): b_cube = cubes[b] # 如果 b 的立方已经大于等于 a 的立方,后续更大的 c,d 肯定不成立 # 但由于 c,d >= b,所以 b^3 + c^3 + d^3 >= 3*b^3 # 如果 3*b^3 > a^3,则可以提前 break if 3 * b_cube > a_cube: break # 遍历 c,从 b 到 a-1 for c in range(b, a): c_cube = cubes[c] # 同理,如果 b^3 + 2*c^3 > a^3,可以 break if b_cube + 2 * c_cube > a_cube: break # 遍历 d,从 c 到 a-1 for d in range(c, a): d_cube = cubes[d] total = b_cube + c_cube + d_cube if total == a_cube: print(f"Cube = {a}, Triple = ({b},{c},{d})") found = True elif total > a_cube: # 因为 d 是递增的,如果当前和已经大于 a^3,后续的 d 只会更大 break if not found: # 题目没有明确说无解输出什么,但通常这类题如果有解才输出 # 如果必须处理无解情况,可以根据具体OJ要求添加,这里暂不输出额外信息 pass if __name__ == "__main__": try: # 读取输入 import sys input_line = sys.stdin.readline() if input_line: N = int(input_line.strip()) if 1 <= N <= 100: find_perfect_cubes(N) except Exception: pass