• hdu 4548 美素数


    #include<stdio.h>
    #include<string.h>
    #include<math.h>
    const int n=1000100;
    bool visit[n];
    int prime[n];
    int ans[70000];
    int a[60];//下标所对应的值不为素数,置0
    int js;
    int isprime()
    {
        //int N;
        for(int i=0; i<60; i++)
            a[i]=i;//初始化自然序列
        a[1]=0;//1不为素数
        for(int i=2; i<=sqrt(60+0.5); i++)
        {
            //对任一不超过N的合数,其素因子不会超过根号下N
            if(a[i]!=0)
                for(int j=2; i*j<60; j++)
                    a[i*j]=0;//将所有合数置0
        }
        //for(int i=0;i<60;i++)
      //printf("%d ",a[i]);
        return  0;
    }
    
    int init_prim()
    {
        memset(visit,true,sizeof(visit));
        int num=0;
        for(int i=2; i<=n; i++)
        {
            if(visit[i]==true)
            {
                num++;
                prime[num]=i;//从下标1开始存数
            }
            for(int j=1; (j<=num)&&(i*prime[j]<=n); j++)
            {
                visit[i*prime[j]]=false;
                if(i%prime[j]==0)break;
            }
        }
        //printf("%d\n",num);
        js=0;
        for(int i=1; i<=num; i++)
        {
            int k=prime[i];
            int sum=0;
            for(int j=0;k;j++)
            {
                sum+=k%10;
                k=k/10;
            }
            if(a[sum])ans[js++]=prime[i];
        }
        //for(int i=0;i<js/100;i++)
        //printf("%d ",ans[i]);
            return 0;
    }
    
    int main()
    {
        int _case;
        int l,r;
        int min,max;
        isprime();
        init_prim();
        scanf("%d",&_case);
        for(int i=1; i<=_case; i++)
        {
            min=0;
            //max
            scanf("%d %d",&l,&r);
            for(int j=0;j<js;j++)
            {
                if(ans[j]>=l&&ans[j]<=r)min++;
                if(ans[j]>r)break;
            }
            printf("Case #%d: ",i);
            printf("%d\n",min);
        }
        return 0;
    }

    素数打表,飘过!!!

    打了两个表:

                 (1)。利用素数模板打prime[]表(prime的值为素数)

                 (2)。打美素数表ans[]时,打了a[]的小素数表,判断各位数之和是否为素数(该数组下标所表示的数为若为素数

                        ,数组的值就是其本身,否则为0),筛选出美素数ans[]表。

  • 相关阅读:
    多线程
    事务的概念与四大特性(ACID)
    Error和Exception的区别
    运算符的使用与注意事项(二)
    运算符的使用与注意事项(一)
    GOJS使用--前端拓扑图
    python算法实现分治法demo
    MySQL主从复制配置
    MySQL锁
    show profile查看SQL执行生命周期
  • 原文地址:https://www.cnblogs.com/XDJjy/p/3085639.html
Copyright © 2020-2023  润新知