1. 程式人生 > >三角形(幾何)CodeForces

三角形(幾何)CodeForces

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