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
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.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
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;
}