(ACM)美素数(打表)

一个十进制数,如果是素数,而且它的各位数字和也是素数,则称之为“美素数”,如29,本身是素数,而且2+9 = 11也是素数,所以它是美素数。

给定一个区间,你能计算出这个区间内有多少个美素数吗?

每行输入两个整数L,R(1<= L <= R <= 1000000),表示区间的左值和右值。

#define maxn 1000000+1

int num[maxn];

bool prime[maxn];

void getprime()

{

       memset(prime,true,sizeof(prime));//一开始假定所有数都是素数

       prime[1]=false;//1肯定不是素数

       int m=sqrt(maxn);

       for(int i=2;i<=m;i++){

            if(prime(i)){

               for(int j=i+i;j

                {  prime[j]=false;}

             }

       }

}

int getsum(int n)

{

    int sum=0;

    while(n>0){

         sum+=n%10;

         n/=10;

    }

    return sum;

}

int main()

{

int cnt=0;

memset(num,0,sizeof(num));

    for(int i=1;i

        if(prime[i]&&prime[getsum(i)]){

            cnt++;

       }

       num[i]=cnt;

    }

    cout<-1]<

}

你可能感兴趣的:((ACM)美素数(打表))