题目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 *****
让我来康康 #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:} zhangjinxuan 发表于 2023-5-29 19:22
这……还能更快吗
欧也许……
还有数学方法,极大地缩小了外层迭代的次数。
欧拉计划 发表于 2023-5-29 20:36
还有数学方法,极大地缩小了外层迭代的次数。
嗯,学到了{:10_256:}
以前根本就不用担心卡常,现在我觉得应该要重视一下了 #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开始
毕达哥拉斯三元组可以写成(m^2 - n^2, 2mn, m^2 + n^2)
这个应该是数论的东西吧感觉 yinda_peng 发表于 2023-5-30 08:10
额,这个好像有点误打误撞了,因为这个是本原的才行,虽说非本原的也不多就是了 我思考了一下,所有非本原的三元数组都是本原三元数组的倍数,也就是所有本原数组决定了所有的非本原数组,所以一般都是对本原三元数组进行研究讨论,大多数情况下的题目都是本原三元数组 好玩的题目 学习一下 欧拉计划 发表于 2023-5-29 15:32
@liuhongrun2022 @Twilight6 @isdkz @元豪 @人造人 @sfqxx@yinda_peng 兄弟们,来挑战新题目啦~
下次记得艾特一下我。 顶 1 让我拉看看 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)
让我来康康 看看 让我康康! 1
页:
[1]
2