題面
傳送門
分析
引理1:三角形的面積×2一定是整數
由座標系中的三角形面積公式
S=21(x1y2+x2y3+x3y1−x1y3−x2y1−x3y2)
顯然得證
故若k2nm是整數,則有解,否則無解
引理2:一定能構造出一個直角邊平行於座標軸的直角三角形,使它的面積爲knm
設直角三角形兩直角邊爲a,b
則ab=k2nm≤nm
由引理1k2nm爲正整數,所以一定可以找到一對正整數(a,b)滿足條件
那麼,如何構造a≤n,b≤m的情況呢
顯然2n或2m與k不互質
(1)若gcd(2n,k)̸=1,則a=gcd(2n,k)2n,b=ak2nm
由於2≤gcd(2n,k)≤k
則a≤n
b=ak2nm=gcd(2n,k)2kn2nm=km×gcd(2n,k)≤kmk=m
(2)若gcd(2n,k)=1,則a=n,b=k2m
由於k≥2,b≤m
代碼
#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);
}
}