其他分享
首页 > 其他分享> > 1356. 回文质数

1356. 回文质数

作者:互联网

思路

  1. 筛出\(10^7\)以内素数
  2. 判断素数表中的数是否为回文数

注意点

  1. 如果一个回文数的位数是偶数,则它的奇数位上的数字和与偶数位上的数字和必然相等,这样的数能被11整除,不可能是素数(11自己除外)。
  2. 由上条性质,素数表只要筛到\(10^7\)即可。
  3. USACO上提交居然MLE?遂放弃记录素数表,直接用标记数组判断某个数是否为素数。
const int N=1e7+10;
bool vis[N];
int l,r;

void init(int n)
{
    for(int i=2;i*i<=n;i++)
        if(!vis[i])
        {
            for(int j=i;j<=n/i;j++)
                vis[i*j]=true;
        }
}

bool check(int x)
{
    string s=to_string(x);
    for(int i=0;i<s.size()/2;i++)
        if(s[i] != s[s.size()-1-i])
            return false;
    return true;
}

int main()
{
    init(N-1);

    cin>>l>>r;

    for(int i=l;i<=min(r,(int)1e7);i++)
        if(!vis[i] && check(i))
            cout<<i<<endl;

    //system("pause");
    return 0;
}

标签:11,10,int,质数,1356,位上,素数,回文
来源: https://www.cnblogs.com/fxh0707/p/14813827.html