前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python-100 练习题 03 完全平方数

Python-100 练习题 03 完全平方数

作者头像
kbsc13
发布2019-08-16 15:19:12
1.2K0
发布2019-08-16 15:19:12
举报
文章被收录于专栏:AI 算法笔记AI 算法笔记

2019年第 15 篇文章,总第 39 篇文章 本文大约 1600 字,阅读大约需要 8分钟

练习题 3 的网址:

http://www.runoob.com/python/python-exercise-example3.html


Example-3 完全平方数

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

思路

首先我们可以假设这个整数是x,那么根据题目有:

代码语言:javascript
复制
x+100 = m**2 (1)
x+100+168 = n**2 (2)

m, n都是正整数,接着就是先根据求解一元二次方程组的做法,可以得到 n**2 - n**2 = 168 (3)

利用平方差分解上式,有(n-m)(n+m)=168,这个时候,我们再做一个变换:

代码语言:javascript
复制
m + n = i (4)
n - m = j (5)
i * j = 168 (6)

这个变换,其实只是再设置两个变量i,j,并且根据它们两者相乘是 168,这是一个偶数,由于两个数相乘是偶数,有两种情况,两者都是偶数,或者一个偶数和一个奇数,然后再求解(4)和(5),有:

代码语言:javascript
复制
n = (i + j) / 2 (7)
m = (i - j) / 2 (8)

根据(7)式子,i+j必须是偶数,这样才可以被 2 整除,得到正整数n,这种情况下,结合(4)和(5),可以推导得到i,j都是大于等于 2 的偶数,又根据(6),可以推导到i,j的范围是:

代码语言:javascript
复制
1 < j < i < 85

这里是假设了i > j的情况,因为不存在一个偶数的平方就是168,所以假设i>j

代码实现

第一种实现:

代码语言:javascript
复制
def perfect_square():
    for i in range(1, 85):
        if 168 % i == 0:
            j = 168 / i;
            if i > j and (i + j) % 2 == 0 and (i - j) % 2 == 0:
                m = (i + j) / 2
                n = (i - j) / 2
                x = n * n - 100
                print(x)

第二种实现是网上大神的解法,参考文章:

  • https://www.cnblogs.com/iderek/p/5954778.html
  • http://www.cnblogs.com/CheeseZH/archive/2012/11/05/2755107.html

这种实现其实就是在分析过程中,只推导到m,n部分,即(3)式的部分,然后直接根据这个公式和范围来求解,这个时候m,n的范围就是(1,169)

这是一个应用列表推导式的解法:

代码语言:javascript
复制
def perfect_square2():
    '''
    列表推导式
    :return:
    '''
    [print(m**2-100, end=',') for m in range(1, 169) for n in range(1, 169) if (n**2 - m**2) == 168]

def perfect_square2_loop():
    '''
    for 循环形式
    :return:
    '''
    for m in range(1, 169):
        for n in range(1, 169):
            if (n ** 2 - m ** 2) == 168:
                print(m ** 2 - 100, end=',')

输出结果都是:

代码语言:javascript
复制
-99,21,261,1581,

源代码在:

https://github.com/ccc013/CodesNotes/blob/master/Python_100_examples/example3.py

或者点击原文,也可以查看源代码。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-02-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 算法猿的成长 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Example-3 完全平方数
    • 思路
      • 代码实现
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档