传送门:http://codeforces.com/problemset/problem/707/C
题目大意:输入一个整数,求另外两个数,使得这三个数为边的三角形是直角三角形。
题目分析:
百度到了勾股数的构造方法:
首先1和2是构造不出来的,
对≥3的数n:
若n为奇数,则
n2−12
和
n2+12
是勾股数。
若n为偶数,则
n24−1
和
n24+1
是勾股数。
证明很简单,直接平方和一下就行了。不过怎么想到的呢?我自己试着猜测了一下,大概是由平方差公式的变形 (2n+1)2−(2n−1)2=4n 推过来的。如果n是奇数直接把4除过去就行了,如果n是偶数的话 (2n+1)2/2 是小数,所以把2n看做一个整体,换元一下就出来了。
代码就随便看看吧,有了上述公式,学过最基本编程的人都会写。
#include <bits/stdc++.h>
typedef long long ll;
using namespace std;
int main() {
ll a;
scanf("%I64d", &a);
if(a<3)
printf("-1\n");
else {
if(a&1)
printf("%I64d %I64d\n",(a*a-1)/2, (a*a+1)/2);
else
printf("%I64d %I64d\n", a*a/4-1, a*a/4+1);
}
}