今天先写了一道很简单的题目,需要掌握的也就一个知识点:
那就是用欧几里得算法来求最大公约数,用两数之积除以两数最大公约数求最小公倍数。没了~~~~~~~~~~~
================================================================================================================
题目描述:
给定六个正整数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的约数
================================================================================================================
注意细节:
这里的变量定义需要用long long才能,因为有些数的最小公倍数实在是很大-----------------------------------------------实在是坑
================================================================================================================
#include <stdio.h>
int fun(int a, int b)
{
int tmp;
while (b != 0) {
tmp = a % b;
a = b;
b = tmp;
}
return a;
}
int main()
{
long long a, b, c, d, e, f;
long long m, n;
while (scanf("%lld%lld%lld%lld%lld%lld", &a, &b, &c, &d, &e, &f) && a != 0) {
m = fun(fun(a, b), c);
n = d * e / fun(d, e) * f / fun(d * e / fun(d, e), f);
if (n % m == 0)
printf("YES\n");
else
printf("NO\n");
}
return 0;
}
================================================================================================================