8619 公约公倍

Description

给定六个正整数a,b,c,d,e,f;问你是否存在整数既是a,b,c的最大公约的倍数,同时又是d,e,f的最小公倍数的约数。 


输入格式

输入为多case输入,每个case只有一行,每行六个正整数。当输入6个0时结束。



输出格式

存在输出YES,否则输出:NO



 

输入样例

32 40 16 20 30 24
0 0 0 0 0 0



 

输出样例

YES 

 

提示

32,40,16的最大公约数是:8;而20,30,24的最小公倍数为120,显然存在整数(如24),既是8的倍数,又是120的约数 

#include<cstdio>
int gcd(int a,int b)
{
    return b==0?a:gcd(b,a%b);
}
int main()
{
    int a, b, c, d, e, f, i, j,k, k1, k2;
    int t=0;
    while (1)
    {
        k1 = k2 = 0;
        scanf("%d%d%d%d%d%d", &a, &b, &c, &d, &e, &f);
        if (!a&&!b&&!c&&!d&&!e&&!f)
            break;
        b=gcd(a,b);
        k1=gcd(b,c);
        if(d>=e&&d>=f)  k=d;
        if(e>=d&&e>=f)  k=e;
        else k=f;
        j=1;
        while(1)
        {
            t=j*k;
            if(t%d==0&&t%e==0&&t%f==0) break;
            else j++;
        }
        /*此处在求三个数的最小公倍数时,先找到三个数中最大的数k,
        随着t=j*k,当t%d==0&&t%e==0&&t%f==0时,t就是满足条件的LCM*/
        for (i = k1, j = 1; i <= t / 2; j++, i = j * k1)
            if (t % i == 0)
                break;
        if (i > t / 2)
            printf("NO\n");
        else
            printf("YES\n");
    }
    return 0;
}
View Code

 

posted @ 2015-01-30 23:27  JL_Zhou  阅读(404)  评论(0编辑  收藏  举报