求助
  • 板块灌水区
  • 楼主pengbonan
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/8/8 11:13
  • 上次更新2024/8/8 12:00:09
查看原帖
求助
1005693
pengbonan楼主2024/8/8 11:13

P2406

#include <iostream>
#include <map>
#include <cmath>
#define int long long
using namespace std;
int qpow (int a, int b) {
	int ans = 1ll, base = a;
	while (b) {
		if (b & 1ll)
			ans *= base;
		base *= base;
		b >>= 1ll;
	}
	return ans;
}
signed main () {
	int a, b;
	while (cin >> a >> b) {
		int x = 0, y = 0;
		int tot = b / a;
		int m = tot;
		map <int, int> cnt;
		for (int i = 2; i * i <= m; i ++) {
			while (m % i == 0) {
				cnt[i] ++;
				m /= i;
			}
		}
		if (m > 1)
			cnt[m] ++;
		int n = cnt.size();
		int ans1, ans2;
		ans1 = ans2 = 1 * 0x3f3f3f3f * 0x3f3f3f3f;
		for (int i = 0; i < (1 << n); i ++) {
			int j = 0;
			int f1 = 1, f2 = 1;
			for (auto x : cnt) {
				j ++;
				if (i & (1 << j))
					f1 *= qpow(x.first, x.second);
				else
					f2 *= qpow(x.first, x.second);
			}
			if (f1 + f2 < ans1 + ans2)
				ans1 = f1, ans2 = f2;
		}
		int a1 = ans1, a2 = ans2;
		ans1 = min(a1, a2), ans2 = max(a1, a2);
		cout << ans1 * a << ' ' << ans2 * a << '\n';
	}
	return 0;
}

样例没问题,提交全WA

2024/8/8 11:13
加载中...