xmu 1307一把心酸一把泪啊
来源:互联网 发布:mtv分享精灵软件 编辑:程序博客网 时间:2024/05/19 23:54
#include<stdio.h>#include<string.h>#include<math.h>int a[1000010];#define MAXN 1000010unsigned int plist[60000],pcount;unsigned int isprime[(MAXN>>5)+1];#define setbitzero(a) (isprime[(a)>>5]&=(~(1<<((a)&31))))#define setbitone(a) (isprime[(a)>>5]|=(1<<((a)&31)))#define ISPRIME(a) (isprime[(a)>>5]&(1<<((a)&31)))void initprime(){ int i,j,m; int t=(MAXN>>5)+1; for(i=0;i<t;++i)isprime[i]=2863311530; plist[0]=2;setbitone(2);setbitzero(1); m=(int)sqrt(MAXN); for(pcount=1,i=3;i<=m;i+=2) if(ISPRIME(i)) for(plist[pcount++]=i,j=i<<1;j<=MAXN;j+=i) setbitzero(j); if(!(i&1))++i; for(;i<=MAXN;i+=2)if(ISPRIME(i)){plist[pcount++]=i;a[i]=i;}}int main(){int t,i,j,temp;scanf("%d",&t);memset(a,0,sizeof(a));initprime();for(i=2;i<=1000010;i++){if(a[i]==0){temp=i;for(j=2;j<=temp;j++){if(temp%j==0){a[temp]=a[temp/j]+j;temp=temp/j;break;}}}}while(t--){int l,r;long long sum=0;scanf("%d%d",&l,&r);for(i=l;i<=r;i++)sum+=a[i];printf("%lld\n",sum);}return 0;}