CF1285C Fadi and LCM

CF1285C Fadi and LCM

题目链接:CF1285C

题意:给定一个数x,要找出两个数a,b,使得a,b的最小公倍数等于x。且a,b中最大的值尽可能的小。即max(a,b)尽可能小。

思路:如果x为1或者x为质数,则输出1以及它本身。否则就通过暴力枚举,时间复杂度为sqrt(n)。

代码如下:

#include<bits/stdc++.h>
using namespace std;
 
bool isPrime(long long x) {
	if (x <= 1)
		return false;
	if (x == 2)
		return true;
	if (x % 2 == 0)
		return false;
	long long i, m;
	m = sqrt(x);
	for (i = 2; i <= m; i++) {
		if (x % i == 0)
			return false;
	}
	return true;
}
 
long long gcd(long long m, long long n) {
	return m % n == 0 ? n : gcd(n, m % n);
}
 
int main() {
	long long x;
	while (cin >> x) {
		if (x == 1||isPrime(x))
			cout << 1 << ' ' << x << endl;
		else {
			pair<long long, long long > ans;
			long long i, m;
			m = sqrt(x);
			long long a, b;
			ans.first = ans.second = LLONG_MAX;
			for (i = 1; i <= m; i++) {
				a = i;
				if (x % a == 0) {
					b = x / a;
					long long g = gcd(a, b);
					if (b < ans.second && (g == 1 || a == 1)) {
						ans.first = a;
						ans.second = b;
					}
				}
			}
			cout << ans.first << ' ' << ans.second << endl;	
		}
	}
	return 0;
}
发布了50 篇原创文章 · 获赞 52 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/qq_43058685/article/details/103933709
lcm