一个数加100是完全平方数,再加168又是一个完全平方数

jan-bar · · 581 次点击 · 开始浏览    置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。

#### 1.说明 1. 暴力法都知道,但是如果起始没弄好会忽略-99这个数 2. 更优的解法需要好的思路 ```go package main import ( "fmt" "math" ) func main() { /** * 常规解法,暴力找到合适的数 * 因为a>=0 且 b>=0,因此i从-100开始 **/ for i := -100; i < 10000; i++ { a, b := int(math.Sqrt(float64(i+100))), int(math.Sqrt(float64(i+100+168))) if a*a == (i+100) && b*b == (i+100+168) { fmt.Println(i) } } /** * 设要找的数为n则满足如下方程 * A = n+100 = x * x * B = n+100+168 = y * y * 因为B>A,所以可以设y = x+z,z > 0 * 因此B = n+100+168 = (x+z) * (x+z) * B-A 可以推出: 168 = (x+z) * (x+z) - x*x * 最终得出x = 84/z - z/2,因为x > 0,所以0 < z <= 13 * 遍历1<= z <=13,得到x,根据A的等式可得出n = x * x - 100 * 因为用了除法,所以使用浮点数运算,满足条件时z/x/n全是整数 **/ for z := float64(1); z <= 13; z++ { x := 84/z - z/2 if float64(int(x)) == x { fmt.Println(int(x*x - 100)) } } } ```

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

581 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传