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

    问题链接HDU1431 素数回文

    问题简述:参见上述链接。

    问题分析看似比较简单的问题,实际上需要一个过程来解决,否则不是时间出问题,就是空间出问题。

    首先,需要编写一个程序,计算1到100000000之间的回文素数,得到两个值。一是这个区间的最大回文素数是9989899,二是这个区间的回文素数个数是780个。

    因此,在定义数组空间时,就可以取一个合适的数值,避免空间超出限制范围。同时可以节省存储空间,加快程序运行速度。

    另外,使用布尔数组作为素数筛选标志也可以大量节省存储。

    算法策略上,先行筛选素数再判定是否是回文数,时间上比较好一点,逻辑上也比较顺。

    程序说明:(略)。

    AC的C语言程序如下:

    /* HDU1431 HIT1004 回文素数 */
    
    #include <iostream>
    #include <math.h>
    #include <stdio.h>
    
    using namespace std;
    
    #define MAXN 9989899
    
    bool isprime[MAXN+1];
    int prime[800];
    int count;
    
    // 函数功能:判断n是否为回文数
    // 参数n:需要判断是否为回文数的数
    bool isPalindrome(int n)
    {
        int temp1 = n, temp2 = 0;
    
        while(n > 0) {
            temp2 = temp2 * 10 + n % 10;
            n /= 10;
        }
    
        return temp1 == temp2;
    }
    
    // Eratosthenes筛选法,包含回文数判断
    void sieveofe(bool isprime[], int prime[], int n, int &count)
    {
        int i, j;
    
        count = 0;
        isprime[0] = false;
        isprime[1] = false;
        isprime[2] = true;
    
        // 初始化
        for(i=3; i<=n; i++) {
            isprime[i++] = true;
            isprime[i] = false;
        }
        int max = sqrt(n);
        for(i=3; i<=max; i++){
            if(isprime[i]) {
                for(j=i+i; j < n; j+=i)    //进行筛选
                    isprime[j] = false;
            }
        }
    
        // 将回文素数放数组prime中,在这里判断是否是回文数
        prime[0] = 2;
        j = 1;
        for(i=3; i<=n; i+=2)
            if(isprime[i] && isPalindrome(i))
                prime[j++] = i;
    
        count = j;
    }
    
    int main()
    {
        sieveofe(isprime, prime, MAXN, count);
    
        int a, b;
    
        while(~scanf("%d%d",&a,&b)) {
            for(int i=1; i<count; i++) {
                if(prime[i] < a)
                    continue;
                if(prime[i] > b)
                    break;
                printf("%d
    ", prime[i]);
            }
            printf("
    ");
        }
    
        return 0;
    }


  • 相关阅读:
    图论03—随意两点间最短距离及路径(改进)
    &lt;转&gt;Openstack ceilometer 宿主机监控模块扩展
    【从零学习openCV】IOS7下的openCV开发起步(Xcode5.1.1&amp;openCV2.49)
    零基础学python-6.2 共享引用
    hdu 2191 悼念512汶川大地震遇难同胞——珍惜如今,感恩生活
    Android与设计模式——单例(Singleton)模式
    SpringMVC+Jquery -页面异步载入数据
    hdoj Let the Balloon Rise
    openStack使用宿主机监控
    winscp自动执行脚本
  • 原文地址:https://www.cnblogs.com/tigerisland/p/7564880.html
Copyright © 2011-2022 走看看