#include<bits/stdc++.h>
#pragma GCC optimize(3)
using namespace std;
const int MAXN=1e7+5;
int l,r;
long long ans;
bool isprime[MAXN];
short v[MAXN],cntv[MAXN],divi[MAXN];
int prime[MAXN],cnt;
int main(){
cin>>l>>r;
for(int i=2;i<=r;i++){
if( !isprime[i] )
prime[++cnt]=i,v[i]=i;
for(int j=1;j<=cnt && i*prime[j]<=r;j++){
v[i*prime[j]]=prime[j];
isprime[i*prime[j]]=1;
if( i%prime[j]==0 )
break;
}
}
divi[1]=cntv[1]=v[1]=1;
for(int i=2;i<=r;i++){ //这里是第24行
if( v[i/v[i]]!=v[i] )
cntv[i]=1, divi[i]=divi[i/v[i]]*2;
else
cntv[i]=cntv[i/v[i]]+1, divi[i]=divi[i/v[i]]/(cntv[i/v[i]]+1)*(cntv[i]+1);
}
for(int i=l;i<=r;i++)
ans+=divi[i];
cout<<ans<<endl;
return 0;
}
这份代码因为第24到第29行而一直RE,在洛谷开O2就没问题了,但是在某OJ上就不行,有没有大佬指点一下RE在什么地方? 数据: 1 10000000