四平方和定理 。时间复杂度:O(sqrt(N)) 。空间复杂度:O(1) 。
1.n一直除以4,直到不能整除为止 。
2.n%8,如果余7,直接返回4 。
3.从1到sqrt(n)开始循环,aa+bb=c成立时,a和b都不为0,返回2;a和b有一个为0,返回1 。
4.返回3 。
5.在本题中,返回值是1和2的是true 。返回值是3和4的是false 。
文章插图
代码用编写 。代码如下:
【2021-05-04:给定一个非负整数c,你要判断是否存在两个整数a和b】
package mainimport ("fmt""math")func main() {for i := 1000; i <= 1100; i++ {ret := isSquares(i)fmt.Println(i, ret)}}//4+1+1+1func isSquares(n int) bool {return numSquares(n) <= 2}func numSquares(n int) int {for n&3 == 0 { //n%4==0n >>= 2 //n/=4}if n&7 == 7 { //n%8==7return 4}a := 0for a*a <= n {b := int(math.Sqrt(float64(n - a*a)))if a > b {break}if a*a+b*b == n {ret := 0if a != 0 {ret++}if b != 0 {ret++}return ret}a += 1}return 3}
执行结果如下:
- 西安,大理是一个地方?
- ?一个超有意思的 Python 综合能力测试网站
- 一个有意思的周刊,值得关注
- 母鸡自己一个笼子里关着能下蛋吗?
- Linux定时任务清理文件脚本
- 三 电系魔法师成长之路—仪器仪表学习设计一个五倍共射放大器
- NOIP2017列队
- 将一个数组变成二叉树
- 通过 6 人介绍可以认识世界上任何一个人?
- 你叔叔用25.7米长的篱笆围了一个半圆形的养鸡场,求这个养鸡场的面积。