原题链接
原博客链接
题意:给一个数
n
n
n,判断
n
n
n是否是一个勾股数
(勾股数定义:对一个正整数
x
x
x,若存在两个正整数
y
y
y,
z
z
z使得
x
2
+
y
2
=
z
2
x^2+y^2=z^2
x2+y2=z2或
x
2
=
y
2
+
z
2
x^2=y^2+z^2
x2=y2+z2,则称
x
x
x为勾股数 )
思路:设
n
n
n为直角边,令
a
2
+
n
2
=
c
2
a^2+n^2=c^2
a2+n2=c2
⟹
\Longrightarrow
⟹
c
2
−
a
2
=
n
2
c^2-a^2=n^2
c2−a2=n2
⟹
\Longrightarrow
⟹
(
c
+
a
)
(
c
−
a
)
=
n
2
(c+a)(c-a)=n^2
(c+a)(c−a)=n2
(
c
>
a
>
0
)
(c>a>0)
(c>a>0)
令
A
=
c
+
a
,
B
=
c
−
a
A=c+a, B=c-a
A=c+a,B=c−a
n
n
n是勾股数
⟺
\Longleftrightarrow
⟺存在
A
>
B
>
0
A > B>0
A>B>0 使得
A
∗
B
=
n
2
A*B=n^2
A∗B=n2
则
c
=
(
A
+
B
)
÷
2
c=(A+B)\div2
c=(A+B)÷2,
a
=
(
A
−
B
)
÷
2
a=(A-B)\div2
a=(A−B)÷2
[
A
≡
B
(
m
o
d
2
)
时
有
解
]
[A\equiv B(mod2)时有解]
[A≡B(mod2)时有解]
1.当
n
2
n^2
n2为奇数时,
A
=
n
2
,
B
=
1
是
一
组
解
A=n^2,B=1是一组解
A=n2,B=1是一组解
2.当
n
2
n^2
n2为偶数时,
A
=
n
2
÷
2
,
B
=
2
是
一
组
解
A=n^2\div2,B=2是一组解
A=n2÷2,B=2是一组解
当
n
=
1
n =1
n=1, 或
n
=
2
n=2
n=2时无解
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
LL n,ans1,ans2;
int main()
{
scanf("%lld",&n);
if(n==1||n==2) printf("-1\n");
else
{
if(n*n%2==1) ans1=(n*n+1)/2, ans2=(n*n-1)/2;
else ans1=(n*n/2+2)/2, ans2=((n*n/2-2))/2;
printf("%lld %lld\n",ans1,ans2);
}
return 0;
}