• Pythagorean Triples CodeForces


    给定一个数n(1 <= n <= 1e9),判断这个数是否是一个直角三角形的边长,如果是,则输出另外两条边(1 <= x <= 1e18),否则输出-1.

    参考题解:http://blog.csdn.net/harlow_cheng/article/details/69055614

    百度勾股数

    首先,当n <= 2 的时候无解,其他时候都有解

    假设n是直角边,a是斜边,则n^2 + b^2 = a^2;

    n^2 = (a + b)*(a - b);

    ①假设n是偶数,则另(a - b) == 2;

    ==>  a + b = (n ^ 2) / 2;

    ==>  a* 2 = (n*n)/2 + 2;

    ==>  a = n*n/4 + 1;

    因为n是大于二的偶数,所以a有整数解,b = a- 2;

    ②假设n是偶数,则另(a - b) == 1;

    ==>  a + b = (n ^ 2) ;

    ==>  a* 2 = (n*n) + 1;

    因为n是大于二的奇数,所以a有整数解,b = a- 1;

    代码如下

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 int main()
     4 {
     5     long long  x;
     6     cin >> x;
     7     if(x <= 2){cout<<"-1"<<endl; return 0;}
     8     if(x % 2)
     9     {
    10         long long  a = (x * x + 1) / 2;
    11         long long int b = a - 1;
    12         cout << b << " " << a << endl;
    13     }
    14     else
    15     {
    16         long long int a = x * x / 4 + 1;
    17         long long int b = a - 2;
    18         cout << b << " " << a << endl;
    19     }
    20     return 0;
    21 }

    这是看完题解后补得题,惭愧,都说是大水题,还是没做出来,,,

    看题的时候没法想到这方面,总是想着枚举暴力,懒,不愿动笔,这是一个大缺点,要改。!

    print “ 欢迎来到渣小狼的博客,这既是博客,也是日记,里面记录了小狼的学习经历还有一些小狼的见解,非常希望每一个来到这里的人能够留下只言片语,更加的希望留下的是对于小狼的不足的补充,谢谢(*^__^*) 嘻嘻……”
  • 相关阅读:
    全面理解面向对象的 JavaScript
    账号
    移动端 前端框架 amaze ui
    javascript 精典案例分析一览
    前端事件系统(一)
    周总结12
    周总结11
    相比较于其他的同类软件
    团队冲刺第十五天
    团队冲刺第十四天
  • 原文地址:https://www.cnblogs.com/wolf-yasen/p/6728891.html
Copyright © 2020-2023  润新知