• 洛谷P2667 超级质数 [2017年6月计划 数论05]


    P2667 超级质数

    题目背景

    背景就是描述,描述就是背景。。。。。。

    题目描述

    一个质数如果从个位开始,依次去掉一位数字,两位数字,三位数字。。。。。。直到只剩一位数字中间所有剩下的数都是质数,则称该质数为一个超级质数。例如:2333是一个质数,因为2333,233,23,2都是质数,所以2333是一个四位超级素数。请你写一个程序,给定一个整数X,求大小小于X的超级质数。

    输入输出格式

    输入格式:

    一行,给出一个整数X(1<=X<=100000000).

    输出格式:

    第一行,一个整数k,表示X以内超级质数的个数.

    第2至k+1行,每行一个整数,输出所有X以内的超级质数,这些数按从小到大的顺序排列。

    输入输出样例

    输入样例#1:
    100
    输出样例#1:
    13
    2
    3
    5
    7
    23
    29
    31
    37
    53
    59
    71
    73
    79

    说明

    对于30%的数据,X<=1000。

    对于100%的数据,X<=100000000。

    最后一道数学水题了。

     1 #include <bits/stdc++.h>
     2 const int INF = 0x3f3f3f3f;
     3 inline void read(long long &x)
     4 {
     5     x = 0;char ch = getchar();char c = ch;
     6     while(ch < '0' || ch > '9')c = ch, ch = getchar();
     7     while(ch <= '9' && ch >= '0')x = x * 10 + ch - '0',ch = getchar();
     8     if(c == '-')x = -x;
     9 }
    10 
    11 long long x;
    12 
    13 long long a;
    14 
    15 bool IsPrime(long long k)
    16 {
    17     long long a = sqrt(k);
    18     for(int i = 2;i <= a;i ++)
    19     {
    20         if(k % i == 0)
    21         {
    22             return false;
    23         }
    24     }
    25     return true;
    26 }
    27 
    28 long long prime[1000];
    29 
    30 long long num[10];
    31 int head,tail;
    32 int main()
    33 {
    34     read(x);
    35     if(x < 2){printf("0");return 0;}
    36     if(x < 3){printf("1
    2");return 0;}
    37     if(x < 5){printf("2
    2
    3");return 0;}
    38     if(x < 7){printf("3
    2
    3
    5");return 0;}
    39     if(x < 23){printf("4
    2
    3
    5
    7");return 0;}
    40     head = 1;
    41     tail = 4;
    42     prime[1] = 2;
    43     prime[2] = 3;
    44     prime[3] = 5;
    45     prime[4] = 7;
    46     num[0] = 1;
    47     num[1] = 3;
    48     num[2] = 7;
    49     num[3] = 9;
    50     while(head <= tail)
    51     {
    52         for(int i = 0;i <= 3;i ++)
    53         {
    54             long long tmp = prime[head] * 10 + num[i];
    55             if(tmp <= x && IsPrime(tmp))
    56             {
    57                 prime[++tail] = tmp;
    58             }
    59             if(tmp > x)goto L1;
    60         }
    61         head ++;
    62     }
    63 L1:
    64     printf("%d
    ", tail);
    65     for(int i = 1;i <= tail;i ++)
    66     {
    67         printf("%d
    ", prime[i]);
    68     }
    69     return 0;
    70 }
  • 相关阅读:
    Mysql支持的数据类型
    JavaScript 原型中的哲学思想
    99%的人都理解错了HTTP中GET与POST的区别
    Let's Encrypt,站点加密之旅
    说说cglib动态代理
    说说Java代理模式
    RESTful API 编写指南
    RESTful 架构风格概述
    Centos 6 搭建安装 Gitlab
    超详细的阿里字节Spring面试技术点总结(建议收藏)
  • 原文地址:https://www.cnblogs.com/huibixiaoxing/p/6985271.html
Copyright © 2020-2023  润新知