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<stdio.h>
int gy(int a,int b);
int gb(int a,int b);
int main()
{
int a, b, c, d, e, f, j, q, k, y,flag;
while(scanf("%d%d%d%d%d%d", &a, &b, &c, &d, &e, &f) && a && b && c && d && e && f)
{
flag = 0;
q = 1;
j = gy(gy(a,b),c);
k = gb(gb(d,e),f);
for(int i = j; i <= k; i = j * q)
{
if(k % i == 0)
{
flag = 1;
break;
}
q++;
}
if(flag)
printf("YES\n");
else
printf("NO\n");
}
}
int gy(int a,int b)
{
int r;
while(b)
{
r = a % b;
a = b;
b = r;
}
return a;
}
int gb(int a,int b)
{
int max, min, i;
max = a > b ? a : b;
min = a > b ? b : a;
for(i = 1; ; i ++)
{
if((max * i) % min == 0)
break;
}
return max * i;
}