zoukankan      html  css  js  c++  java
  • poj3247:回文素数

    总时间限制: 5000ms 内存限制: 65536kB
    描述
    一个数如果从左往右读和从右往左读数字是相同的,则称这个数是回文数,如121,1221,15651都是回文数。给定位数n,找出所有既是回文数又是素数的n位十进制数。(注:不考虑超过整型数范围的情况)。
    输入
    位数n,其中1<=n<=9。
    输出
    第一行输出满足条件的素数个数。
    第二行按照从小到大的顺序输出所有满足条件的素数,两个数之间用一个空格区分。
    样例输入
    1
    样例输出
    4
    2 3 5 7

    这道题挺简单的,本来自己是肯定能够想到平方根为界限的,我开始自己傻了吧唧的,想减少判断过程所需的时间,于是想要初始化的时候预处理出所有小于1000000000是否为素数的标记

    结果估计初始化的过程就超时了。。。

    直接贴代码了,这太简单了。。。

    #include <iostream>
    #include <queue>
    #include <stdio.h>
    using namespace std;
    
    const int MAX = 1000000000;
    int n;
    queue<int> q;
    int m[10]={0};
    int coun = 0;
    
    
    bool OK(int k)
    {
        if(k <= 1)
            return false;
        for(int i = 2; i * i <= k; i++)
        {
            if(k%i == 0)
                return true;
    
        }
        return false;
    }
    
    
    void work(int i)
    {
        if(i == n)
        {
            int res = 0;
            for(int j = 0; j < n; j++)
            {
                res *= 10;
                res += m[j];
             }
             if(OK(res))
             {
                 q.push(res);
                 coun++;
             }
             return ;
        }
        if( i < n/2 || ( n%2!=0 && i < n/2+1 ) )
        {
            for(int j = 0; j < 10; j++)
            {
                if(i == 0 &&((j == 0 || j == 2 || j == 5 || j == 4 || j == 6 || j == 8)&&n>1) )
                {
                    continue;
                }
                m[i] = j;
                work(i+1);
            }
        }
        else
        {
                m[i] = m[n-1-i];
                work(i+1);
        }
    }
    
    int main()
    {
        scanf("%d",&n);
        work(0);
        printf("%d
    ",coun );
        for(int i = 0; i < coun; i++)
        {
            int res = q.front();
            q.pop();
            printf("%d ", res);
        }
        printf("
    ");
        return 0;
    }
  • 相关阅读:
    通过crontab命令创建任务
    linux 通过at命令创建任务
    在linux中如何实现定时发送邮件到指定邮箱,监测任务
    python发送邮件
    序列化分析
    文件写入
    导入excel成一个list集合不支持大文件倒入(优化点在于分批分线程导入)
    react重学
    关于java集合排序
    fiddler还是浏览器的问题
  • 原文地址:https://www.cnblogs.com/xiaoshen555/p/3843855.html
Copyright © 2011-2022 走看看