美素数(hdu 4548)打表

来源:互联网 发布:linux打包压缩命令 编辑:程序博客网 时间:2024/05/21 07:05

本题链接

把所有美素数求出来打一个表,数组中存从1到当位置有多少美素数。当前位置不是美素数的要记录为前一个美素的值,输出直接用区间右值的美素数个减区左值前一个美素数。

#include <iostream>#include <cstdio>using namespace std;int a[1000100];int b[1000100];bool funtc(int n){    for(int i=2; i*i<=n; i++)        if(n%i==0)            return false;    return true;}int Init(){    int sum=0;    for(int i=2; i<1000100; i++)    {        if(funtc(i))        {            a[i]++;            int n=i,num=0;            while(n>0)            {                num+=(n%10);                n/=10;            }            if(a[num]&&a[i])                sum++;        }        b[i]=sum;    }}int main(){    Init();    int T;    scanf("%d",&T);    for(int Case=1; Case<=T; Case++)    {        int L,R;        scanf("%d%d",&L,&R);        printf("Case #%d: %d\n",Case,b[R]-b[L-1]);    }}


0 0
原创粉丝点击