总结:
我是废物我不会数学
还是二分查找用着舒服
一定要多总结数学思路
暴力方法,时间复杂度大概为o(n**0.5)
def fun1(num):
'''
第一种方法类似于顺序查找
:param num:
:return:
'''
if num==1:
return True
for i in range(2,num):
if num/i==i:
return True
if num/i<i:
break
return False
二分查找方法
def fun2(num):
'''
第一种方法我是化简了的
所以比o(n)要好很多
但是毕竟是顺序查找,现在来尝试一下二分查找
:param num:
:return:
'''
l=0
r=num #这个先取num自己试一下
while l<=r:
mid=(l+r)//2
cur=mid**2
if cur==num:
return True
elif cur<num:
l=mid+1
else:
r=mid-1
return False
print(fun1(36))
他确实有数学,不过官方的解答用的是
牛顿迭代法
想起了被数值计算支配的恐惧
所以放弃了哈哈哈
def fun3(num):
'''
他有一个数学标签,所以看一下
能不能用数学问题解决
:param num:
:return:
'''
蠢一点的数学方法
def fun4(num):
'''
num = n2=1 + 3 + 5 + ... + (2∗n−1)
所以不断地进行奇数试减就好
:param num:
:return:
'''
x=1
while num>0:
num-=x
x+=2
return num==0