CodeForces - 707C

katya上五年级了,最近她在学习三角形和勾股定理。很显然,你可以用三个边长为正数的线段去构造一个直角三角形,而这三个数被称作“勾股数”。

比如,(3,4,5),(5,12,13),(6,8,10)都是勾股数。

现在katya很好奇如果她能够确定直角三角形的某一条边,那么她能否找到另外两条边使得这三条边组成直角三角形。注意,她确定的边可以是直角边也可以是斜边。

katya能够轻松的解决这个问题,你也可以吗?

Input

输入一个整数n(1 ≤ n ≤ 109) ——直角三角形的一边的长度

Output

在一行里输出两个整数m,k(1 ≤ m, k ≤ 1018),使得(n,m,k)为勾股数。

如果找不到任何勾股数包含n,那么输出-1。如果有多个答案,输出任意一个。

Sample Input

Input1

3

Input2

6

Input3

1

Input4

17

Input5

67 

Sample Output

Output1

4 5

Output2

8 10

Output3

-1

Output4

144 145

Output5

2244 2245

题解 : 

对奇数而言 :

3^2+4^2=5^2     
5^2+12^2=13^2
7^2+24^2=25^2
9^2+40^2=41^2
3^2=9 把9/2=4.5 数轴上取4.5的左一位整数4和4.5右一位整数5分别平方                   
勾股定理 3^2+4^2=5^2
5^2=25 把25/2=12.5 数轴上取12.5的左一位整数12和右一位整数13分别平方
即5^2+12^2=13^2
7^2=49 把49/2=24.5 数轴上取24.5的左一位整数24和右一位整数25分别平方
即7^2+24^2=25^2
对偶数而言:
4^2+3^2=5^2     
8^2+15^2=17^2
10^2+24^2=26^2
100^2+2499^2=2501^2
存在一个偶数,它的平方除以4,仍然可以得到一个整数,这个数相邻的2个数字与它也能构成一组勾股数
以上题解 n 只能代表直角边,不能做斜边!

#include<stdio.h>
#include<math.h>
int main(){
long long n;
scanf("%lld",&n);
if(n>2){
if(n%2==0){
long long s=n*n/4;
printf("%lld %lld\n",s-1,s+1);
}
else{
long long s=(long long)(n*n/2);
printf("%lld %lld\n",s,s+1);
}
}
else{
printf("-1\n");
}
return 0;
}

猜你喜欢

转载自blog.csdn.net/black_horse2018/article/details/79405542