牛客 勾股定理 解题报告(数论)
作者:互联网
目录
数论题。。一言难尽
题目描述
链接: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