社区讨论

TLE求调

B3871[GESP202309 五级] 因数分解参与者 2已保存回复 4

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
4 条
当前快照
1 份
快照标识符
@mje3lehq
此快照首次捕获于
2025/12/20 17:30
3 个月前
此快照最后确认于
2025/12/22 20:05
3 个月前
查看原帖
硬着模拟加了个特判就过一个点(捂脸)
CPP
#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;
#define int long long
bool check(int x) {
	if (x < 2) return false;
	if (x == 2) return true;
	for (int i = 2; i * i <= x; i++)
		if (x % i == 0) return false;
	return true;
}
signed main() {
	int n; cin >> n;
	string result = ""; int cnt = 0;
	if (check(n)) {
		cout << n << endl;
		return 0;
	}
	for (int i = n; i >= 2; i--) if (check(i) && n % i == 0) {
		string tmp;
		vector<int> primes;
		while (n % i == 0 && n != 1) {
			primes.push_back(i);
			n /= i;
		}
		if (primes.size() == 1) {
			tmp = to_string(primes[0]);
			reverse(tmp.begin(), tmp.end());
		} else {
			string power = to_string(primes.size()); reverse(power.begin(), power.end());
			string base = to_string(primes[0]); reverse(base.begin(), base.end());
			tmp += (power + "^" + base);
		}
		if (cnt != 0) result += " * ";
		result += tmp;
		cnt++;
	}
	if (cnt != 1) reverse(result.begin(), result.end());
	cout << result;
	return 0;
}

回复

4 条回复,欢迎继续交流。

正在加载回复...