[Project Euler] 来做欧拉项目练习题吧: 题目009
[Project Euler] 来做欧拉项目练习题吧: 题目009
周银辉
问题描述:
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.
问题分析:
毕达哥拉斯三元组:三个正整数a,b,c 满足 a^2 + b^2 = c^2
维基一下:http://en.wikipedia.org/wiki/Pythagorean_triple (在维基这方面,国人发现手机网络比家里宽带更能正常显式?)
发现构造毕达哥拉斯三元组的方法有很多(值得注意的是,有些方法是构造“原毕达哥拉斯三元组primitive Pythagorean triple (PPT)”的,由PPT可以构造出其他三元组),其中一种方法是这样的:
取任意的正整数m, n (m>n)
a = m^2 - n^2
b = 2*m*n
c = m^2 + n^2
由于题目要求 a+b+c = 2*m^2 + 2*m*n = 1000
所以,m^2 + m*n = 500, n=500/m-m
又由于m,n是正整数,那么m^2必定小于500, 也就是说, m<sqrt(500)<23
那么很简单地,枚举并试探m就可以找到正确答案了。
int test()
{
int m, n, a, b, c, result=0;
double t;
for(m=2; m<23; m++)
{
t = 500.0/m - m;
n = (int)t;
if(t-n==0 && m>n) //t-(int)t==0说明t是整数
{
printf("m=%d, n=%d\n", m, n);
a = m*m - n*n;
b = 2*m*n;
c = m*m + n*n;
result = a*b*c;
printf("a=%d, b=%d, c=%d, abc=%d\n\n", a, b, c, result);
}
}
return result;
}
分类:
Algorithm
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
2008-01-27 WPF的线程模型
2007-01-27 获奖啦, 微软亚洲研究院第九届学生实践项目