关于洛谷编译出错的问题

· · 个人记录

今天我在做P2568 GCD 这道题的时候,交了很多次。每次都是编译出错。

我在devc++中运行是没有任何问题,在洛谷的在线IDE中会报告“ Nothing is compiled: OUTPUT exceeds . ” 这个错误。

大意是没有编译任何东西,输出超过。很奇怪啊,从没遇到过。下面是我当时的代码;

#include  <bits/stdc++.h>
using  namespace  std;
int  cnt,n;
int  prime[10000005],phi[10000005]={0,1};
bool tf[10000005]={1,1};
long long pre[10000005]={0},ans;
int  main(){
     cin >>n;
     for(int i=2;i<=n;i++){
        if(!tf[i]){
            prime[++cnt]=i;
            phi[i]=i-1;
         }  
        for(int j=1;j<=cnt && i*prime[j]<=n;j++){
            tf[i*prime[j]]=1;
            if(i%prime[j]==0){
                phi[i*prime[j]]=phi[i]*prime[j];
                break;
             }else{
                phi[i*prime[j]]=phi[i]*(prime[j]-1);
             }
         }
     }
     for(int i=1;i<=n;i++){
        pre[i]=pre[i-1]+phi[i];
     }
     for(int i=1;i<=cnt && prime[i]<=n;i++){
        ans+=(pre[n/prime[i]]<<1)-1;
     }
     cout<<ans;
     return  0;
}

后来,我把4--6行的数组赋值放到主函数里,就奇迹般的ac了。也是很无语,很震惊。所以在这里大胆猜测一下,是不是数组开太大,赋值要放在main函数里。这里警醒一下后人,数组赋值最好放在主函数里。[大哭]