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 "); else printf("YES "); } return 0; }