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;
    }

  • 相关阅读:
    HashMap代码示例
    ArrayList代码示例
    ArrayList&LinkedList&Map&Arrays
    Calendar日历小程序
    System & Runtime &Math
    基本类型的封装类
    开发规范
    P1607 [USACO09FEB]庙会班车Fair Shuttle
    P2869 [USACO07DEC]美食的食草动物Gourmet Grazers
    Set,Multiset,Iterator(迭代器)详解
  • 原文地址:https://www.cnblogs.com/zhouyinhui/p/1945911.html
Copyright © 2011-2022 走看看