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


数论题。。一言难尽

题目描述

链接: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);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值