天边一抹灬红 发表于 2020-3-20 11:10
输入 10000 超时
天边一抹灬红 发表于 2020-3-20 11:11
输入 10000000 超时
蒋博文 发表于 2020-3-20 11:24
只会用math库
138 ms
黎影 发表于 2020-3-20 14:37
import math
number1 = input('输入:')
b = 0
输入 4 应该返回 True,0**2 + 2**2 = 4
_2_ 发表于 2020-3-20 14:49
输入 4 应该返回 True,0**2 + 2**2 = 4
阴阳神万物主 发表于 2020-3-20 16:05
难度评级:简单
要素分析:数论 循环 效率
自评:惨绝人寰的超大数据绝对超时。
效率有待提升{:10_266:}
兔子BUNNY 发表于 2020-3-20 19:04
好吧,改了这么多次,还顺便加上了2这个特殊量,有点像数学学等差数列那样
输入 1 应该返回 True
catwine1990 发表于 2020-3-20 19:20
注意效率
NAMELESSONE 发表于 2020-3-20 19:44
411 ms
旅途Z 发表于 2020-3-20 21:35
from math import sqrt
15 ms
def f355(c):
return sum([(c-i**2)**0.5%1==0 for i in range(int(c**0.5)+1)])!=0
zltzlt 发表于 2020-3-21 17:56
6 ms
哇,当时就感觉这个思路应该很快,没想到这么快
ouyunfu 发表于 2020-3-21 18:10
输入超大数据(> 10 ** 14)还是会超时
我卡在如果没有此数就结束这一点上了{: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: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: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))
圆的特性,加上勾股定理。
zltzlt 发表于 2020-3-21 18:03
输入 4 应该返回 True,0**2 + 2**2 = 4
算惹,不写了
心情不好
flamezyy 发表于 2020-3-21 19:33
哇,当时就感觉这个思路应该很快,没想到这么快
这个厉害
zltzlt 发表于 2020-3-21 17:51
输入 1 应该返回 True
谢谢提醒