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;}

原创粉丝点击