其他分享
首页 > 其他分享> > 牛客 勾股定理 解题报告(数论)

牛客 勾股定理 解题报告(数论)

作者:互联网

目录


数论题。。一言难尽

题目描述

链接:https://ac.nowcoder.com/acm/problem/200580
来源:牛客网

给定一个整数A。
求是否存在两个整数B,C使得长度为A,B,C的三条边可以组成一个直角三角形。
输入描述:

第一行一个数字T(1≤T≤1000)T(1 \le T \le 1000)T(1≤T≤1000),表示样例个数。
其中每个样例:
仅包含一行一个整数A(3≤A≤109)A(3 \le A \le 10^{9})A(3≤A≤109)。

输出描述:

每个样例输出一行。
如果存在符合条件的B,C(1≤B,C≤1018)B,C(1 \le B,C \le 10^{18})B,C(1≤B,C≤1018),请输出任意一组解,两个整数之间以空格分隔。
如果不存在任何符合条件的解,请输出-1 -1
样例1:
输入:
3
4
6
13

输出:
5 3
8 10
12 5
提示:答案不唯一,只要输出符合题意即可通过。

思路分析

其实没啥好分析的。就是结论:
若输入的数为偶数:
则 b=((aa)/4)-1,c=((aa)/4)+1。
若输入为奇数:
则 b=a*a/2,c=b-1。

完整代码

#include <iostream>
#include <cstdio>
using namespace std;
typedef long long ll;

int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        ll a,b,c;
        scanf("%lld",&a);
        if(a==0)
        {
            b=c=-1;
        }
        else if(a%2==0)
        {
            b=a*a/4-1,c=a*a/4+1;
        }
        else
        {
            b=a*a/2;
            c=b+1;
        }
        printf("%lld %lld\n",b,c);
    }
}
nagisa-kun 发布了19 篇原创文章 · 获赞 1 · 访问量 258 私信 关注

标签:输出,勾股定理,10,样例,le,牛客,解题,1000,lld
来源: https://blog.csdn.net/nagisa2019/article/details/104060678