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
代码本身复杂度比较高吧……