鱼C论坛

 找回密码
 立即注册
查看: 2910|回复: 3

题目138:考察高和底边相差1的等腰三角形

[复制链接]
发表于 2016-8-27 02:11:09 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
Special isosceles triangles

Consider the isosceles triangle with base length, b = 16, and legs, L = 17.

QQ20160827-2@2x.png


By using the Pythagorean theorem it can be seen that the height of the triangle, h = √(172 − 82) = 15, which is one less than the base length.

With b = 272 and L = 305, we get h = 273, which is one more than the base length, and this is the second smallest isosceles triangle with the property that h = b ± 1.

Find ∑ L for the twelve smallest isosceles triangles for which h = b ± 1 and b, L are positive integers.


题目:

考虑底边 b 长为 16,腰长 L 为 17 的等腰三角形:

QQ20160827-2@2x.png


利用勾股定理可知此三角形的高 h 为 h = √(172 − 82) = 15,比底边长少 1。

当 b = 272, L = 305 时,可以得到 h = 273,比底边长大 1。而这也是第二小的满足 h = b ± 1 的等腰三角形。

求前 12 个满足此性质的三角形的 L 之和,其中 b 和 L 均为正整数。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-9-28 15:38:14 | 显示全部楼层
程序是很简单,关键是要运行多久的问题。前8个:
16
272
4896
87840
1576240
28284464
59907457
91530450
[Finished in 179.3s]
lst = []
for d in range(2,100000000):
        l1 = (0.25*d*d + (d-1)*(d-1))**0.5
        l2 = (0.25*d*d + (d+1)*(d+1))**0.5
        if l1 == int(l1) or l2 == int(l2):
                lst.append(d)
                print (d)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-1-31 20:56:15 | 显示全部楼层
jerryxjr1220 发表于 2016-9-28 15:38
程序是很简单,关键是要运行多久的问题。前8个:

老哥这个题目的答案是多少啊,我算的是872587755
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-2 00:24:04 | 显示全部楼层
本帖最后由 guosl 于 2022-9-15 23:34 编辑

先假设b=2y,h=b+1,则L^2=y^2 + (2y+1)^2
L^2 -5b^2 - 4b - 1 = 0;
而这个二次不定方程的整数解有递推式(https://www.alpertron.com.ar/QUAD.HTM)
x(n+1) = - 9x(n) - 20y(n) - 8
y(n+1) = - 4x(n) - 9y(n) - 4
再假设b=2y,h=b-1,则L^2=y^2 + (2y-1)^2
L^2 -5b^2 + 4b - 1 = 0;
而这个二次不定方程的整数解有递推式
x(n+1) = - 9x(n) - 20y(n) + 8;
y(n+1) = - 4x(n) - 9y(n) + 4;
但这两个递推得出的结果就前后相差一项,所以任取一个都行,又对x来讲正负都一样,
而y是负的正好对应于h=b-1的情况。
答案:1118049290473932
#include <iostream>
#include <cstdlib>
using namespace std;

int main(void)
{
  long long x1 = 1, x2, y1 = 0, y2;
  unsigned long long nS = 0;
  for (int i = 1; i <= 12; ++i)
  {
    x2 = -9 * x1 - 20 * y1 - 8;
    y2 = -4 * x1 - 9 * y1 - 4;
    long long h, b;
    b = 2 * abs(y2);
    if (y2 < 0)
      h = b - 1;
    else
      h = b + 1;
    x1 = x2;
    y1 = y2;
    nS += abs(x1);
  }
  cout << nS << endl;
  return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-22 21:33

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表