为什么最后一个测试点总是TLE,还有什么优化方式呢?怎样优化求质数呢?
查看原帖
为什么最后一个测试点总是TLE,还有什么优化方式呢?怎样优化求质数呢?
1292265
Zzz123456789101112楼主2024/3/5 18:15
#include<iostream>
#include<math.h>
using namespace std;
int digit(int  x) {//判断是否为>2的偶数位数的数,若是则没有回文质数,因回文数均为11的倍数
	if ((x >= 1000 && x <= 10000) || (x >= 100000 && x <= 1000000))
		return 0;
	else
		return 1;
}
int reverse(int x) {//判断是否为回文数(借用翻转函数的思路)
	int result = 0;
	int num = x;
	while (x != 0) {
		result = result * 10 + x % 10;
		x /= 10;
	}
	if (result == num)
		return 1;
	else
		return 0;
}
int IsPrime(int x) {
	
		for (int i = 2; i <= (int)sqrt(x); i++) {//如果n被i整除,则返回false
			if (x % i == 0) {
				return 0;
			}
		}
		return 1;    // 反之则返回true 
	
}
int main() {
	int a, b;
	cin >> a >> b;
	if (a < 5 || b>1000000000) {
		return 0;
	}

	for (int  i = a; i <= b; i++) {//
		//if (i == 9999989) //如果到了这个数,就break 
		//	break;//?必须判断吗?i<=b不能作为返回条件吗?
		if (digit(i) &&reverse(i)&&  IsPrime(i) ) {
			cout << i<<endl;
		}
	}
	return 0;
}
2024/3/5 18:15
加载中...