求助
查看原帖
求助
729386
_Fancy_楼主2025/1/17 15:51

神秘的RE

debug的时候,好像是到第二层要x乘上3的一次方RE掉了。

#include <bits/stdc++.h>
using namespace std;
int pri[17] = {0, 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47};
struct node {
	int len, a[50005];
	void write() {
		for(int i = len; i >= 1; i--) printf("%d", a[i]);
	}
	bool min(node x) {
		if(x.len > len) return false;
		if(x.len < len) return true;
		for(int i = len; i >= 1; i--) {
			if(a[i] > x.a[i]) return true;
			if(a[i] < x.a[i]) return false;
		}
		return false;
	}
} ans;
node time(node d, int x) {
	for(int i = 1; i <= d.len; i++) d.a[i] *= x;
	for(int i = 1; i <= d.len; i++) if(d.a[i] >= 10) d.a[i + 1] += d.a[i] / 10, d.a[i] %= 10;
	if(d.a[d.len + 1] >= 10) d.len++;
	while(d.a[d.len] >= 10) d.a[d.len + 1] += d.a[d.len] / 10, d.a[d.len] %= 10, d.len++;
	return d;
}
node times(node d, int x, int b) {
	if(b == 0) return d;
	if(b == 1) {
		return time(d, x);
	}
	while(b--) d = time(d, x);
	return d;
}
void dfs(int now, int n, node x, int lst) {
	if(n == 1) {
		if(ans.min(x)) ans = x;
		return;
	}
	if(now == 16 || lst == 0) return;
	for(int i = 0; (i + 1) * (i + 1) <= n; i++) {
		if(n % (i + 1) == 0) {
			if(i <= lst && i != 0) {
				dfs(now + 1, n / (i + 1), times(x, pri[now], i), i);
			}
			if(n / (i + 1) - 1 <= lst && i != n - 1) {
				cout << pri[now] << " " << n / (i + 1) - 1 << endl;
				dfs(now + 1, i + 1, times(x, pri[now], n / (i + 1) - 1), n / (i + 1) - 1);
			}
		}
	}
}
signed main() {
	int n;
	scanf("%d", &n);
	ans.len = 50000;
	for(int i = 1; i <= ans.len; i++) ans.a[i] = 9;
	dfs(1, n, {1, {-1, 1}}, n + 1);
	ans.write();
	return 0;
}
2025/1/17 15:51
加载中...