神秘的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;
}