欧拉计划 发表于 2023-5-29 03:45:44

题目9:找出唯一的满足a + b + c = 1000的毕达哥拉斯三元组

题目9:找出唯一的满足a + b + c = 1000的毕达哥拉斯三元组

Special Pythagorean triplet

A Pythagorean triplet is a set of three natural numbers, a < b < c,

for which, a2 + b2 = c2

For example, 32 + 42 = 9 + 16 = 25 = 52.

There exists exactly one Pythagorean triplet for which a + b + c = 1000.
Find the product abc.

题目翻译:

如果存在 3 个自然数 a、b、c,假设 a < b < c,满足条件 a2 + b2 = c2,例如 32 + 42 = 9 + 16 = 25 = 52,那么这就是一个毕达哥拉斯三元组。

已知存在并且只存在一个毕达哥拉斯三元组满足条件 a + b + c = 1000。

找出该三元组,并计算出 a * b * c 的结果。


视频讲解:

https://www.bilibili.com/video/BV1nk4y1u7Lh/


思路解析及源码参考(C & Python):

**** Hidden Message *****

sfqxx 发表于 2023-5-29 17:53:58

让我来康康

zhangjinxuan 发表于 2023-5-29 19:22:59

#include <bits/stdc++.h>
using namespace std;


int main() {
        for (int a = 1; a <= 1000; ++a) {
                for (int b = a + 1; b + a <= 1000; ++b) {
                        int c2 = a * a + b * b;
                        int c = sqrt(c2);
                        if (c * c == c2 && c > b && a + b + c == 1000) {
                                printf("%d*%d*%d=%d\n", a, b, c, a * b * c);
                        }
                       
                }
        }
}
这……还能更快吗{:10_277:}

欧也许……{:10_256:}

欧拉计划 发表于 2023-5-29 20:36:10

zhangjinxuan 发表于 2023-5-29 19:22
这……还能更快吗

欧也许……

还有数学方法,极大地缩小了外层迭代的次数。


zhangjinxuan 发表于 2023-5-29 20:45:15

欧拉计划 发表于 2023-5-29 20:36
还有数学方法,极大地缩小了外层迭代的次数。

嗯,学到了{:10_256:}

以前根本就不用担心卡常,现在我觉得应该要重视一下了

yinda_peng 发表于 2023-5-30 08:10:22

#include <stdio.h>
int main()
{
      for (int a = 150;a < 1000;a += 2)
      {
                for (int b = 151;b < 1000-a;b += 2)
                {
                        if (a*a + b*b == (1000-a-b) * (1000-a-b))
                        {
                              printf("a:%d,b:%d,c:%d\n",a,b,1000-a-b);
                              printf("%d\n",a*b*(1000-a-b));
                              return 0;
                        }
                }
      }

      return 0;
}
//我只知道有一个结论是一个奇数一个偶数,这个我当时初中数学老师提过有点印象,然后略微算一下可以从150开始

yinda_peng 发表于 2023-5-30 08:13:14

毕达哥拉斯三元组可以写成(m^2 - n^2, 2mn, m^2 + n^2)
这个应该是数论的东西吧感觉

yinda_peng 发表于 2023-5-30 09:14:14

yinda_peng 发表于 2023-5-30 08:10


额,这个好像有点误打误撞了,因为这个是本原的才行,虽说非本原的也不多就是了

yinda_peng 发表于 2023-5-30 10:39:22

我思考了一下,所有非本原的三元数组都是本原三元数组的倍数,也就是所有本原数组决定了所有的非本原数组,所以一般都是对本原三元数组进行研究讨论,大多数情况下的题目都是本原三元数组

auend 发表于 2023-6-2 14:11:36

好玩的题目

PH.Chen 发表于 2023-6-12 10:12:40

学习一下

高山 发表于 2023-6-27 06:14:39

欧拉计划 发表于 2023-5-29 15:32
@liuhongrun2022 @Twilight6 @isdkz @元豪 @人造人 @sfqxx@yinda_peng 兄弟们,来挑战新题目啦~

下次记得艾特一下我。

开树SCO 发表于 2023-7-2 23:55:00

shibocheng 发表于 2023-7-2 23:56:27

1

wanglida12 发表于 2023-7-3 10:37:34

让我拉看看

a8634944 发表于 2023-7-4 10:02:46

for a in range(1,1001):
    for b in range(a+1,1000):
      c= a*a+b*b
      if a + b + (c**0.5) == 1000:
            print(a, b, c**0.5)

xajhzxc 发表于 2023-7-6 16:56:30


让我来康康

年华一度水一歌 发表于 2023-7-6 16:56:54

看看

傲然子 发表于 2023-7-7 22:36:50

让我康康!

pixie99 发表于 2023-7-10 15:28:24

1
页: [1] 2
查看完整版本: 题目9:找出唯一的满足a + b + c = 1000的毕达哥拉斯三元组