题面
分析
引理1:三角形的面积( imes 2)一定是整数
由坐标系中的三角形面积公式
[S=frac{1}{2}(x_1y_2+x_2y_3+x_3y_1-x_1y_3-x_2y_1-x_3y_2)
]
显然得证
故若(frac{2nm}{k})是整数,则有解,否则无解
引理2:一定能构造出一个直角边平行于坐标轴的直角三角形,使它的面积为(frac{nm}{k})
设直角三角形两直角边为(a,b),则(ab=frac{2nm}{k} leq nm)
由引理1,(frac{2nm}{k})为正整数,显然一定可以拆分成两正整数之积,所以一定可以找到一对正整数((a,b))满足条件
根据引理1,我们来证明:
对于给定的任意正整数(n,m,k(k geq 2)),一定存在一个直角三角形的两直角边长为正整数(a,b),且(a,b)满足条件$$ab=frac{2nm}{k}$$
那么,如何构造(aleq n,bleq m)的情况呢
显然(2n)或(2m)中的至少一个数与(k)不互质,否则(frac{2nm}{k})不可能为正整数
(1)
若(gcd(2n,k)
eq 1),则
[a=frac{2n}{gcd(2n,k)},b=frac{2nm}{ak}
]
由于$2 leq gcd(2n,k) leq k$
则$a leq n$
$$ b=frac{2nm}{ak} =frac{2nm}{frac{2kn}{gcd(2n,k)}}=frac{m imes gcd(2n,k)}{k} leq frac{mk}{k}=m $$
故$bleq m$
(2)
若(gcd(2n,k) = 1),则(a=n,b=frac{2m}{k})
由于(k geq 2),显然得(b leq m)
综上所述,对于给定的任意正整数(n,m,k(k geq 2)),一定存在一个直角三角形的两直角边长为正整数(a,b),且(a,b)满足条件(ab=frac{2nm}{k})
代码
#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
");
}else{
printf("YES
");
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
");
printf("%I64d 0
",a);
printf("%I64d %I64d
",a,b);
}
}