70分求教,n>36756720以上输出全部是0

P1463 [POI2001] [HAOI2007] 反素数

```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


|