https://ac.nowcoder.com/acm/contest/7607/A
简单的线筛函数出来,但是交上去 RE。
#include<bits/stdc++.h>
#define N 10000000
#define ll long long
using namespace std;
bool vis[N+5],is[N+5];
int p[N],cnt;
int fac[N+5];
bool prework(){
is[1]=1,fac[1]=1;
for(int i=2;i<=N;i++){
if(!vis[i]){
p[++cnt]=i;
is[i]=1;
fac[i]=i;
}
for(int j=1;j<=cnt&&p[j]*i<=N;j++){
vis[p[j]*i]=1;
fac[p[j]*i]=p[j];
if(fac[i]==p[j]&&is[i]) is[i*p[j]]=1;
else is[i*p[j]]=0;
if(i%p[j]==0) break;
}
}
}
int main(){
prework();
int a,b;
scanf("%d%d",&a,&b);
ll ans=0;
for(int i=a;i<=b;i++){
if(is[i]) ans+=fac[i];
else ans++;
}
printf("%lld\n",ans);
return 0;
}