问题描述
题目链接: http://codeforces.com/problemset/problem/707/C
思路
数论,勾股数中寻找规律(若3个数,分别用a,b,c表示,其中a*a+b*b=c*c):
当a为奇数时:a=2*n+1,b=2*n*(n+1),c=2*n*(n+1)+1。
当a为偶数时:a=2*n,b=n*n-1,c=n*n+1。
之后判断a,b,c是否不为0以及是否满足勾股数条件。
代码
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
int main()
{
long long n,a,b,c;
scanf("%I64d",&a);
if(a%2==1)
{
n=(a-1)/2;
b=2*n*(n+1);
c=2*n*(n+1)+1;
}
else
{
n=a/2;
b=n*n-1;
c=n*n+1;
}
if(a*a+b*b==c*c&&a&&b&&c)
printf("%I64d %I64d\n",b,c);
else
printf("-1\n");
return 0;
}