zoukankan      html  css  js  c++  java
  • 美素数

    题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=88159#problem/H

    题意:

         一个十进制数,如果是素数,而且它的各位数字和也是素数,则称之为“美素数”。计算在所输入的区间中有多少个美素数。

         案例:

         input

         3

         1 100

         2 2

         3 19

         output

         Case #1: 14

         Case #2: 1

         Case #3: 4

    思路分析:

         最多可能有1000000个数,又最多有10000种案例,最坏的情况会是循环10000000000次,数过大,会超时,应该要进行打表。

         把所有数都标记为1,先找出所有不是素数的数标记为0(去掉),再找出满足条件的素数,计录从1开始到i的所有满足条件的数的个数b[i]。

         在案例输入后,只要输出b[R]-b[L-1]即可。

    源代码如下:

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #define MAX 1000000
     5 using namespace std;
     6 int a[MAX+5],b[MAX+5];
     7 int main()
     8 {
     9     int T,L,R,i,j,t=0;
    10     for(i=2;i<=MAX;i++)
    11         a[i]=1;
    12     b[0]=a[0]=a[1]=0;
    13     for(i=2;i<=1000;i++)
    14         if(a[i])
    15             for(j=i*i;j<=MAX;j+=i)
    16                 a[j]=0;
    17     for(i=1;i<=MAX;i++)
    18     {
    19         b[i]=b[i-1]+a[i];
    20         if(a[i])
    21         {
    22             int k=i,sum=0;
    23             while(k)
    24             {    
    25                 sum+=k%10;
    26                 k=k/10;    
    27             }
    28             if(!a[sum])
    29                 b[i]=b[i]-1;
    30         }
    31     }
    32     scanf("%d",&T);
    33     while(T--)
    34     {
    35         scanf("%d%d",&L,&R);
    36         printf("Case #%d: %d
    ",++t,b[R]-b[L-1]);
    37     }
    38     return 0;
    39 }

          

         

  • 相关阅读:
    windows权限维持
    pocsuite3检测工具 编写poc
    php异或免杀
    python 多线程ftp爆破
    python ip查询 whois查询 # CDN查询# 子域名查询# 端口扫描
    python src批量爬取
    qykcms 审计
    dedecms审计
    EasySNS 审计
    zzcms审计
  • 原文地址:https://www.cnblogs.com/q-c-y/p/4748883.html
Copyright © 2011-2022 走看看