Oj之路(第三天)

今天先写了一道很简单的题目,需要掌握的也就一个知识点:

那就是用欧几里得算法来求最大公约数,用两数之积除以两数最大公约数求最小公倍数。没了~~~~~~~~~~~

================================================================================================================

题目描述:

给定六个正整数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;
}

================================================================================================================

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章