```cpp
long long n,ans=2000000001;
long long k=0;
const long long prime[12]={0,2,3,5,7,11,13,17,19,23,29,31};
void dfs(long long prime_now,long long last_index,long long sum_now,long long indexsum_now){
if(sum_now>n)return;
if(indexsum_now<=k&&sum_now>=ans)return;
if(n==12)return;
if(indexsum_now>k){
k=indexsum_now;
ans=sum_now;
}
if(indexsum_now==k){
if(ans>indexsum_now)
ans=sum_now;
}
long long a=sum_now,b;
for(long long i=1;i<=last_index;i++){
a*=prime[prime_now];
b=indexsum_now*(i+1);
dfs(prime_now+1,i,a,b);
}
dfs(prime_now+1,0,sum_now*prime[prime_now],indexsum_now);
}
int main(){
scanf("%lld",&n);
long long m=log(n)/log(2);
dfs(1,m,1,1);
printf("%lld",ans);
return 0;
}
```
by 幕天霁宇 @ 2019-05-18 18:35:29
以上为具体代码
by 幕天霁宇 @ 2019-05-18 18:35:52
数组开小了。。。
by 142857cs @ 2019-05-18 18:36:16
const long long prime[13]={0,2,3,5,7,11,13,17,19,23,29,31};
by 142857cs @ 2019-05-18 18:36:59
好像不是这个问题@[142857cs](/space/show?uid=35760)
by 幕天霁宇 @ 2019-05-18 18:40:09
两个槽点:
1.把第八行的
```cpp
if(n == 12)
```
改成
```cpp
if(prime_now==12)
```
2.
for循环里加入
```cpp
if(a > n) break;
```
by NotaKoala @ 2019-05-18 20:16:47
@[NotaKoala](/space/show?uid=149545) 非常感谢,A了,n==12真的是我zz了,还有感谢a>n break那一句,原来不这样会爆long long
by 幕天霁宇 @ 2019-05-19 22:32:42