美文网首页程序员
(ACM)美素数(打表)

(ACM)美素数(打表)

作者: Newdawnfades | 来源:发表于2018-05-26 13:50 被阅读95次

    一个十进制数,如果是素数,而且它的各位数字和也是素数,则称之为“美素数”,如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<maxn;j=j+i)

                    {  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<maxn;i++){

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

                cnt++;

           }

           num[i]=cnt;

        }

        cout<<a[r]-a[l-1]<<endl;

    }

    相关文章

      网友评论

        本文标题:(ACM)美素数(打表)

        本文链接:https://www.haomeiwen.com/subject/dbrmjftx.html