88分,#9测试点超时
查看原帖
88分,#9测试点超时
1292265
Zzz123456789101112楼主2024/4/11 15:01

为什么会超时,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;
}
2024/4/11 15:01
加载中...