zltzlt 发表于 2020-3-21 17:59:22

天边一抹灬红 发表于 2020-3-20 11:10


输入 10000 超时

zltzlt 发表于 2020-3-21 18:00:04

天边一抹灬红 发表于 2020-3-20 11:11


输入 10000000 超时

zltzlt 发表于 2020-3-21 18:00:51

蒋博文 发表于 2020-3-20 11:24
只会用math库

138 ms

zltzlt 发表于 2020-3-21 18:01:39

黎影 发表于 2020-3-20 14:37
import math
number1 = input('输入:')
b = 0


输入 4 应该返回 True,0**2 + 2**2 = 4

zltzlt 发表于 2020-3-21 18:03:30

_2_ 发表于 2020-3-20 14:49


输入 4 应该返回 True,0**2 + 2**2 = 4

zltzlt 发表于 2020-3-21 18:04:12

阴阳神万物主 发表于 2020-3-20 16:05
难度评级:简单
要素分析:数论 循环 效率
自评:惨绝人寰的超大数据绝对超时。


效率有待提升{:10_266:}

zltzlt 发表于 2020-3-21 18:05:15

兔子BUNNY 发表于 2020-3-20 19:04
好吧,改了这么多次,还顺便加上了2这个特殊量,有点像数学学等差数列那样

输入 1 应该返回 True

zltzlt 发表于 2020-3-21 18:05:48

catwine1990 发表于 2020-3-20 19:20


注意效率

zltzlt 发表于 2020-3-21 18:06:17

NAMELESSONE 发表于 2020-3-20 19:44


411 ms

zltzlt 发表于 2020-3-21 18:07:21

旅途Z 发表于 2020-3-20 21:35
from math import sqrt




15 ms

ouyunfu 发表于 2020-3-21 18:10:01

def f355(c):
    return sum([(c-i**2)**0.5%1==0 for i in range(int(c**0.5)+1)])!=0

flamezyy 发表于 2020-3-21 19:33:08

zltzlt 发表于 2020-3-21 17:56
6 ms

哇,当时就感觉这个思路应该很快,没想到这么快

zltzlt 发表于 2020-3-21 20:07:52

ouyunfu 发表于 2020-3-21 18:10


输入超大数据(> 10 ** 14)还是会超时

ab16838123 发表于 2020-3-21 20:12:03

我卡在如果没有此数就结束这一点上了{:10_284:}
a=int(input("请输入一个非负整数"))
b=0
c=0
if b**2+c**22==a:
    print(f"{b}^2+{c}^2={a}")
else:
   for b in range(0,(int(a**0.5+1)),1):
       for c in range(0,b,1):
         if b**2+c**22==a:
               print(f"{b}^2+{c}^2={a}")
               break

ab16838123 发表于 2020-3-21 20:20:29

ab16838123 发表于 2020-3-21 20:12
我卡在如果没有此数就结束这一点上了

好像可以再精炼一点
我的分析:
如果:b^2+c^2=a
那么b<=a^0.5,c<=a^0.5
则可以确定出b的整数范围和c的整数范围,还是for循环简单粗暴,其他高级的语法我不会{:10_324:},那个【如果没有整数平方之和则打印“找不到”】这点太难了

a=int(input("请输入一个非负整数"))
for b in range(0,(int(a**0.5+1)),1):
   for c in range(0,b,1):
       if b**2+c**2==a:
         print(f"{b}^2+{c}^2={a}")
         break

阴阳神万物主 发表于 2020-3-22 02:02:40

本帖最后由 阴阳神万物主 于 2020-3-22 02:07 编辑

zltzlt 发表于 2020-3-21 18:04
效率有待提升

运用了一下平面几何,效率飙升。
现在输入 1000000000000000 也就稍微慢一些
def solve(c:'int >= 0')->bool:
    for a in range(1+int((2**0.5)*(c**0.5)/2)):
      b = (c-a**2)**0.5
      if int(b)==b:
            print(a,b)
            return True
    else:return False
if __name__ == '__main__':
    print('示例1 输出:',solve(5))
    print('示例2 输出:',solve(3))

圆的特性,加上勾股定理。

_2_ 发表于 2020-3-22 18:24:29

zltzlt 发表于 2020-3-21 18:03
输入 4 应该返回 True,0**2 + 2**2 = 4

算惹,不写了

_2_ 发表于 2020-3-22 18:27:31

心情不好

wuqramy 发表于 2020-3-23 22:29:32

flamezyy 发表于 2020-3-21 19:33
哇,当时就感觉这个思路应该很快,没想到这么快

这个厉害

快马加鞭未下鞍 发表于 2020-3-26 18:20:00

zltzlt 发表于 2020-3-21 17:51
输入 1 应该返回 True

谢谢提醒
页: 1 2 3 4 5 [6] 7
查看完整版本: Python:每日一题 355