zoukankan      html  css  js  c++  java
  • [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;
    }

  • 相关阅读:
    只有程序员才懂这些黑色幽默!
    只有程序员才懂这些黑色幽默!
    程序员常访问的国外技术交流网站
    回归分析:非线性nlinfi
    Java设计模式(二十一):职责链模式
    Angular4——7.表单处理
    ubuntu 代理设置
    Qt 隐藏标题栏 窗口移动 鼠标事件
    Shevon's Blog
    Allenmind's Blog
  • 原文地址:https://www.cnblogs.com/zhouyinhui/p/1945911.html
Copyright © 2011-2022 走看看