题面
分析
引理1:三角形的面积
×
2
\times 2
×2一定是整数
由坐标系中的三角形面积公式
S
=
1
2
(
x
1
y
2
+
x
2
y
3
+
x
3
y
1
−
x
1
y
3
−
x
2
y
1
−
x
3
y
2
)
S=\frac{1}{2}(x_1y_2+x_2y_3+x_3y_1-x_1y_3-x_2y_1-x_3y_2)
S=21(x1y2+x2y3+x3y1−x1y3−x2y1−x3y2)
显然得证
故若
2
n
m
k
\frac{2nm}{k}
k2nm是整数,则有解,否则无解
引理2:一定能构造出一个直角边平行于坐标轴的直角三角形,使它的面积为
n
m
k
\frac{nm}{k}
knm
设直角三角形两直角边为
a
,
b
a,b
a,b,则
a
b
=
2
n
m
k
≤
n
m
ab=\frac{2nm}{k} \leq nm
ab=k2nm≤nm
由引理1,
2
n
m
k
\frac{2nm}{k}
k2nm为正整数,显然一定可以拆分成两正整数之积,所以一定可以找到一对正整数
(
a
,
b
)
(a,b)
(a,b)满足条件
根据引理1,我们来证明:
对于给定的任意正整数
n
,
m
,
k
(
k
≥
2
)
n,m,k(k \geq 2)
n,m,k(k≥2),一定存在一个直角三角形的两直角边长为正整数
a
,
b
a,b
a,b,且
a
,
b
a,b
a,b满足条件
a
b
=
2
n
m
k
ab=\frac{2nm}{k}
ab=k2nm
那么,如何构造
a
≤
n
,
b
≤
m
a\leq n,b\leq m
a≤n,b≤m的情况呢
显然
2
n
2n
2n或
2
m
2m
2m中的至少一个数与
k
k
k不互质,否则
2
n
m
k
\frac{2nm}{k}
k2nm不可能为正整数
(1)
若
g
c
d
(
2
n
,
k
)
≠
1
gcd(2n,k) \neq 1
gcd(2n,k)̸=1,则
a
=
2
n
g
c
d
(
2
n
,
k
)
,
b
=
2
n
m
a
k
a=\frac{2n}{gcd(2n,k)},b=\frac{2nm}{ak}
a=gcd(2n,k)2n,b=ak2nm
由于
2
≤
g
c
d
(
2
n
,
k
)
≤
k
2 \leq gcd(2n,k) \leq k
2≤gcd(2n,k)≤k
则
a
≤
n
a \leq n
a≤n
b
=
2
n
m
a
k
=
2
n
m
2
k
n
g
c
d
(
2
n
,
k
)
=
m
×
g
c
d
(
2
n
,
k
)
k
≤
m
k
k
=
m
b=\frac{2nm}{ak} =\frac{2nm}{\frac{2kn}{gcd(2n,k)}}=\frac{m \times gcd(2n,k)}{k} \leq \frac{mk}{k}=m
b=ak2nm=gcd(2n,k)2kn2nm=km×gcd(2n,k)≤kmk=m
故
b
≤
m
b\leq m
b≤m
(2)
若
g
c
d
(
2
n
,
k
)
=
1
gcd(2n,k) = 1
gcd(2n,k)=1,则
a
=
n
,
b
=
2
m
k
a=n,b=\frac{2m}{k}
a=n,b=k2m
由于
k
≥
2
k \geq 2
k≥2,显然得
b
≤
m
b \leq m
b≤m
综上所述,对于给定的任意正整数 n , m , k ( k ≥ 2 ) n,m,k(k \geq 2) n,m,k(k≥2),一定存在一个直角三角形的两直角边长为正整数 a , b a,b a,b,且 a , b a,b a,b满足条件 a b = 2 n m k ab=\frac{2nm}{k} ab=k2nm
代码
#include<iostream>
#include<cstdio>
using namespace std;
inline long long gcd(long long a,long long b){
return b==0?a:gcd(b,a%b);
}
long long n,m,k;
int main(){
cin>>n>>m>>k;
if((n*m*2)%k!=0){
printf("NO\n");
}else{
printf("YES\n");
long long S=(n*m*2)/k;
long long a,b;
if(gcd(n*2,k)!=1){
a=n*2/gcd(n*2,k);
b=S/a;
}else{
a=n;
b=m*2/k;
}
printf("0 0\n");
printf("%I64d 0\n",a);
printf("%I64d %I64d\n",a,b);
}
}