Prime Palindromes chapter 1.5

求回文素数,开始直接枚举判断果断tle,后来网上找优化,发现除了11,偶数长度的回文数都可以被11整出,应为上限是100,000,000,所以只需要在长度为 1,3,5,7里寻找(11除外),

看到大牛门直接先用循环生成长度为奇数的回文数再判断素数,我偷鸡了下,直接在a=<i=<b里加速,if(i=999) i=10001...勉强过了 万幸,生成方法参考http://www.cnblogs.com/zjbztianya/archive/2013/01/31/2886509.html

/*

ID: hubiao cave

PROG: pprime

LANG: C++

*/




#include<iostream>

#include<fstream>

#include<string>

using namespace std;


bool IsPrime(int);
bool IsPa(int);
char buf[10];
bool getLength(int n);
int main()

{

    ifstream fin("pprime.in");

    ofstream fout("pprime.out");
    int a,b;
    fin>>a>>b;

    for(int i=a;i<=b;i++)
    {
        if(i==999)
        {
            i=10001;
        }
        if(i==99999)
        {
            i=1000001;
        }
        if(i==9999999)
            break;
        if(IsPa(i))
            if(IsPrime(i))
            fout<<i<<endl;
    }




    return 0;


}

bool IsPrime(int n)
{
    if(n/5==0&&n>5)
        return false;
    if(n==5)
        return true;
    for(int i=2;i*i<=n;i++)
    {
        if(n%i==0)
            return false;
    }
    return true;
}

bool IsPa(int n)
{
    int m=n,i=1;
    while(m/10)
    {
        buf[i]=m%10;
        i++;
        m=m/10;
    }
    buf[i]=m;
    if(i==1)
        return true;
    for(int p=1;p<=i;p++)
    {
        if(buf[p]!=buf[i-p+1])
            return false;
    }
    return true;

}
bool getLength(int n)
{
    if(n==11)
        return true;
    if(n/10>=1&&n/10<=9)
        return false;
    if(n/1000>=1&&n/1000<=9)
        return false;
    if(n/100000>=1&&n/100000<=9)
        return false;
    if(n/10000000>=1&&n/10000000<=9)
        return false;
    return true;
}

原文链接: https://www.cnblogs.com/cavehubiao/p/3260933.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/100136

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月10日 上午5:32
下一篇 2023年2月10日 上午5:34

相关推荐