版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/oier_forever/article/details/82827247
题面
分析
引理1:三角形的面积
一定是整数
由坐标系中的三角形面积公式
显然得证
故若
是整数,则有解,否则无解
引理2:一定能构造出一个直角边平行于坐标轴的直角三角形,使它的面积为
设直角三角形两直角边为
,则
由引理1,
为正整数,显然一定可以拆分成两正整数之积,所以一定可以找到一对正整数
满足条件
根据引理1,我们来证明:
对于给定的任意正整数
,一定存在一个直角三角形的两直角边长为正整数
,且
满足条件
那么,如何构造
的情况呢
显然
或
中的至少一个数与
不互质,否则
不可能为正整数
(1)
若
,则
由于
则
故
(2)
若
,则
由于
,显然得
综上所述,对于给定的任意正整数 ,一定存在一个直角三角形的两直角边长为正整数 ,且 满足条件
代码
#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);
}
}