zoukankan      html  css  js  c++  java
  • [UVA10533]Digit Primes

      本题数字本身是素数,并且各数位和也是素数,这样的数字在某区间内的个数。

      先素数筛,再筛出各数位和是奇数的数,接着统计1-a的时候所有符合条件的数字的个数,求特定区间符合条件的数字做差即可。

      代码如下:

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 #include <cmath>
     5 
     6 using namespace std;
     7 
     8 const int maxn = 1000010;
     9 bool prime[maxn];
    10 int satis[maxn];
    11 int a, b;
    12 
    13 void printlist() {
    14     memset(prime, true, sizeof(prime));
    15     prime[0] = prime[1] = false;
    16     int pedge = int(sqrt(maxn));
    17     for(int i = 2; i <= pedge; i++) {
    18         if(prime[i]) {
    19             int o = maxn / i;
    20             for(int j = 2; j <= o; j++) {
    21                 prime[i*j] = false;
    22             }
    23         }
    24     }
    25 }
    26 
    27 bool judge(int x) {
    28     int ans = 0;
    29     while(x) {
    30         ans += x % 10;
    31         x /= 10;
    32     }
    33     return prime[ans];
    34 }
    35 
    36 void init() {
    37     printlist();
    38     memset(satis, 0, sizeof(satis));
    39     for(int i = 2; i <= maxn; i++) {
    40         if(judge(i) && prime[i]) {
    41             satis[i] = 1;
    42         }
    43     }
    44     for(int i = 2; i <= maxn; i++) {
    45         satis[i] += satis[i-1];
    46     }
    47 }
    48 
    49 int main() {
    50     init();
    51     int T;
    52     scanf("%d", &T);
    53     while(T--) {
    54         scanf("%d %d", &a, &b);
    55         cout << satis[b] << " " << satis[a-1] << endl;
    56         printf("%d
    ",satis[b]-satis[a-1]);
    57     }
    58     return 0;
    59 }
  • 相关阅读:
    如何高效学习读书笔记
    对Java虚拟机理解
    对Java虚拟机的认识和理解
    翻译一篇关于jedis的文章
    Java 异常机制
    spring boot基础 入门
    每天记录一个设计模式之建造者模式
    如何在mybatis 中使用In操作
    Git 基本命令有哪些
    JavaScript
  • 原文地址:https://www.cnblogs.com/kirai/p/4740789.html
Copyright © 2011-2022 走看看