88分,#9测试点超时

P1217 [USACO1.5] 回文质数 Prime Palindromes

Zzz123456789101112 @ 2024-04-11 15:01:33

为什么会超时,reverse函数时间复杂度过高吗?

#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int digit(int  x) {//判断是否为>2的偶数位数的数,若是则没有回文质数,因回文数均为11的倍数
    if ((x >= 1000 && x <= 10000) || (x >= 100000 && x <= 1000000))
        return 0;
    else
        return 1;
}
int IsPrime(int a)
{
    int i;
    if (a == 1)
        return 0;
    if (a % 2 == 0)
        return 0;
    else
    {
        for (i = 2; i * i <= a; i++)
        {
            if (a % i == 0)
                return 0;
        }
        return 1;
    }
}

int main() {
    int a, b;
    cin >> a >> b;
    if (a < 5 || b>100000000) {
        return 0;
    }

    for (int i = a; i <= b; i++) {//
        //      if (i == 9999989) //如果到了这个数,就break 
        //          break;//?必须判断吗?i<=b不能作为返回条件吗?
        string m = to_string(i);
        string n = m;
        reverse(m.begin(), m.end());
        if (digit(i) && m==n && IsPrime(i)) {
            cout << i << endl;
        }
    }
    return 0;
}

by Hilte @ 2024-04-11 15:28:33

代码本身复杂度比较高吧……


|