python3练习100题——003

今天继续~答案都会通过python3测试~

原题链接:http://www.runoob.com/python/python-exercise-example3.html

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

我的代码:

import math
def fun():
    for i in range(-100,10000):    #i的range范围不够精确,具有偶然性
        x=math.sqrt(i+100)%1
        y=math.sqrt(i+268)%1
        if x==0 and y==0:
            print(i)

思考:

没有想那么多,其实这道题要从数学的方面思考得多一点,以确定该数的范围:

假设有m和n两个数满足:

i+100 =n^2

i+268=m^2

首先可以确定i的下限:

i+100=n^2>0, i >-100

然后可以确定i的上限:

由上式可得,m^2-n^2 =168

m与n最少得差一个数:|m|>=|n+1|

(n+1)^2-n^2<=168  得出n<=83.5<84

所以i<84^2-100=6956

这样,就可以得到i的循环在range(-100,6956)以内了!

 

当然如果从数学的方面多去思考能够大大减少运算量,比如从m、n的值入手(如原答案)。

 

转载于:https://www.cnblogs.com/drifter/p/9072167.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值