WA on #2 #6 #2的输入是32768,应输出2888071057872000。但是我的程序输出的就是2888071057872000,luogu评测机告诉我错了
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int p[] = {0,2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53};
int n,f[20],g[20],a[100000],alen;
double mi = 114514;
void dfs(int r,double ans,int x){
// cout << r << " " << ans << " " << x << endl;
if((x >= 3 && f[x - 1] > f[x - 2]) || (f[x - 1] == 0 && x >= 2)){
return;
}
if(x >= 17){
return;
}
if(r == 1){
if(ans < mi){
// cout << mi << endl;
mi = ans;
for(int i = 1;i <= 29;i++){
g[i] = f[i];
}
}
}else{
for(int i = 1;i <= sqrt(r);i++){
if(r % i == 0){
f[x] = i - 1;
dfs(r / i,ans + (i - 1) * log(p[x]),x + 1);
f[x] = r / i - 1;
dfs(i,ans + (r / i - 1) * log(p[x]),x + 1);
f[x] = 0;
}
}
}
}
signed main(){
cin >> n;
dfs(n,0,1);
// for(int i = 1;i <= 16;i++){
// cout << g[i] << " ";
// }
// cout << endl;
memset(a,0,sizeof(a));
a[1] = 1;
alen = 1;
for(int i = 1;i <= 16;i++){
for(int j = 1;j <= g[i];j++){
for(int k = 1;k <= alen;k++){
a[k] *= p[i];
}
for(int k = 1;k <= alen;k++){
a[k + 1] += a[k] / 10;
a[k] %= 10;
}
while(a[alen + 1] != 0){
alen++;
a[alen + 1] += a[alen] / 10;
a[alen] %= 10;
}
}
}
for(int i = alen;i >= 1;i--){
cout << a[i];
}
cout << endl;
return 0;
}