题目解释:
1.输入整数m,求是否存在整数p,使得p*(p+2)=m成立
2.p可以为0和负数
3.p*(p+2)的最小值为-1
所以只要对m分类讨论即可
1.m<-1时,由于p*(p+2)的最小值为-1,所以无解,输出false
2.m==-1时,只有当p=-1时,(-1)*1=-1一解,输出-1
3.m>-1时,由于m=p*(p+2)=p^2+2p,所以√m>=p,所以我们可以从√m往前找找出p,使得p*(p+2)=m成立
同理,(-p)*(-p-2)=m也成立,即-p-2也是一解,输出两解即可
如果有更好的算法感谢dalao提供qwq
实际上我们可以观察到若令t=p-1
则p*(p+2)=(t-1)*(t+1)=t^2-1
这个时候直接计算sqrt(m+1)的正负值是否为整数即可
但都是O(1)
还是ovo大佬强啊%%%%%%