zoukankan      html  css  js  c++  java
  • Codeforces 1058C(思维+最大公因数)

    题面

    传送门

    分析

    引理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);
    	}
    } 
    
  • 相关阅读:
    java:输出流程printStream
    phalcon 连接多个数据库 phalcon multi-database
    Selenium Webdriver元素定位的八种常用方法
    adb push ,adb pull和adb install的区别
    Java将数据写进excel
    Java接口和抽象类的区别
    深入理解Java的接口和抽象类
    Java内存解析 程序的执行过程
    bit,byte,char,位,字节,字符 的区别
    java static成员变量方法和非static成员变量方法的区别 ( 二 )
  • 原文地址:https://www.cnblogs.com/birchtree/p/9858059.html
Copyright © 2011-2022 走看看