Python世界:求解满足某完全平方关系的整数实践

Python世界:求解满足某完全平方关系的整数实践

任务背景

本问题来自于菜鸟教程Python 100例中的例3:

一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?

实现思路

本文较原问题无改进,仅做实现验证,以助个人理解。

问题分析

假设该整数为x,依据题意可转化为以下公式:
x + 100 = n 2 ( 1 ) x + 100 + 168 = m 2 ( 2 ) x + 100 = n^2 \ \ (1)\\ x + 100 + 168 = m^2 \ \ (2)\\ x+100=n2 (1)x+100+168=m2 (2)

由公式1和2,可推导并转化为以下公式:

( m − n ) ( m + n ) = 168 ( 3 ) i ∗ j = 168 ( 4 ) m = ( i + j ) / 2 ( 5 ) n = ( − i + j ) / 2 ( 6 ) (m - n)(m + n) = 168 \ \ (3)\\ i*j = 168 \ \ (4)\\ m = (i + j) / 2 \ \ (5)\\ n = (-i + j) / 2 \ \ (6)\\ (m−n)(m+n)=168 (3)i∗j=168 (4)m=(i+j)/2 (5)n=(−i+j)/2 (6)

以上推导,目的是为了将数学问题转化为计算机可求解的问题,核心看公式4,时刻注意前提x, m, n, i, j均为整数。

从公式1-2,易知:

  • m, n正负不影响x的结果

从公式3-6,易知:

  • i, j必须均为偶数,且两者同正同负
  • i, j其中最小至少为2
  • i, j其中最大至多为168/2

由此可知,问题简化为i, j均为正整数,i, j遍历区间为[2, 168/2],寻找满足公式4-6的i, j,然后反求x。

参考代码

python 复制代码
# -*- coding: utf-8 -*-
"""
功能:求例3的x值
1、初步分析限定范围
2、限定整数范围内遍历求解
"""

def find_x():
    x = []

    # i, j is even
    upper_bound = 168 // 2 + 1 # 加1目的是因为range左开右闭
    for i in range(2, upper_bound, 2):
        j = 168 // i # `//` 实现整数除法
        if j % 2 == 0:
            is_even = True
        else:
            is_even = False
        if i < j and i * j == 168 and is_even: # i, j地位等价,i>j时只是位置交换,x结果不变,故没必要遍历
            res = int(((i + j) / 2) ** 2 - 268)
            x.append(res)
    return x


if __name__ == '__main__':
    print('start!')

    # 正式运行
    x = find_x()
    print(x)

    # 正式退出main函数进程,以免main函数空跑
    print('done!')

参考资料

  1. python的两种除法/和//,得到的数是整型还是浮点型?
  2. 菜鸟教程Python 练习实例3
相关推荐
咸鱼鲸7 分钟前
【PyTorch】PyTorch中数据准备工作(AI生成)
人工智能·pytorch·python
程序员Xu18 分钟前
【OD机试题解法笔记】连续出牌数量
笔记·算法·深度优先
遇见你很高兴28 分钟前
Pycharm中体验通义灵码来AI辅助编程
python
CoovallyAIHub31 分钟前
单目深度估计重大突破:无需标签,精度超越 SOTA!西湖大学团队提出多教师蒸馏新方案
深度学习·算法·计算机视觉
大虫小呓33 分钟前
50个Python处理Excel示例代码,覆盖95%日常使用场景-全网最全
python·excel
CoovallyAIHub34 分钟前
从FCOS3D到PGD:看深度估计如何快速搭建你的3D检测项目
深度学习·算法·计算机视觉
大模型真好玩39 分钟前
做题王者,实战拉跨!是时候给马斯克的Grok4泼盆冷水了!(Grok 4模型详细测评报告)
人工智能·python·mcp
羊八井40 分钟前
使用 Earth2Studio 和 AI 模型进行全球天气预测:太阳辐照
pytorch·python·nvidia
向左转, 向右走ˉ1 小时前
PyTorch随机擦除:提升模型抗遮挡能力
人工智能·pytorch·python·深度学习
马特说1 小时前
金融时间序列机器学习训练前的数据格式验证系统设计与实现
python·机器学习·金融